上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 132 下一页
摘要: 目录P188 P188 这一段是在说强制转换就是向零取证,由于d是double,u是long,所以两者的二进制表示很不一样(想一下1.5和1的二进制表示);而联合是不会改变二进制表示的,所以当d=1.0的时候,u=4607182418800017408 阅读全文
posted @ 2025-07-23 20:35 最爱丁珰 阅读(11) 评论(0) 推荐(0)
摘要: 目录P198P199P201 P198 解释一下栈随机化 程序执行的时候会分配栈帧,如果使用随机化,就是在main函数前随机分配一段内存不适用,这个时候就没办法预测返回地址了,如下 P199 解释一下空操作雪橇: 假设有一个机器,攻击者可以向机器中输入一个字符串,而且攻击者知道机器在接收字符串之后的 阅读全文
posted @ 2025-07-23 20:32 最爱丁珰 阅读(14) 评论(0) 推荐(0)
摘要: 目录P195P197 P195 gets函数体中有一个语句*dest++:注意回忆一下,这里的++是后自增,所以先会解引用,然后把c的值赋值,然后再将指针加一;如果写成(*dest)++,那么就是先解引用,并且让dest指向的值后自增(而不是像前面一样让dest后自增) 还有一些函数与gets一样 阅读全文
posted @ 2025-07-23 17:02 最爱丁珰 阅读(8) 评论(0) 推荐(0)
摘要: 这里补充一下课上讲的关于内存的东西 虽然x86-64理论上的内存大小为\(2^{64}\),但实际上只有\(2^{47}\),于是内存的起始位置为0x00007fffffffffff(注意内存的地址是逐渐减小的,所以这是起始地址而不是结束地址;参考栈) Stack 如图所示,运行时栈 大小不能超过8 阅读全文
posted @ 2025-07-23 14:01 最爱丁珰 阅读(10) 评论(0) 推荐(0)
摘要: 目录P189 P189 这里说的对齐的原因就是大部分机器一次性读取的字节是多个(而不是一个字节),如果不对齐的话一个数据就有可能跨越两个读取区域。x86-64可以正常工作,但是有些机器不可以;无论如何效率都会下降 阅读全文
posted @ 2025-07-22 16:06 最爱丁珰 阅读(10) 评论(0) 推荐(0)
摘要: 来看一个比较复杂的例子 上面的结构体定义中应该是a[4]而不是a[3] 阅读全文
posted @ 2025-07-22 15:57 最爱丁珰 阅读(10) 评论(0) 推荐(0)
摘要: 目录P181 P181 书上的函数也可以直接传递指针 阅读全文
posted @ 2025-07-22 15:51 最爱丁珰 阅读(9) 评论(0) 推荐(0)
摘要: 目录P178 P178 补充一下指针的知识 在C语言中,二维数组 A 的 *A 和 **A 的含义可以通过数组与指针的关系来理解。以下是详细解释: 1. 二维数组的内存布局 假设定义了一个二维数组: int A[3][2] = {{1, 2}, {3, 4}, {5, 6}}; 内存中按行优先顺序连 阅读全文
posted @ 2025-07-22 15:38 最爱丁珰 阅读(15) 评论(0) 推荐(0)
摘要: 目录P176 P176 书上已经说了声明的效果(注意如果声明指针的话,只是分配了指针的空间,而指针指向的空间是没有直接被分配的,我们需要手动指定),那么下面的PPT可以对照一下 可以给一个负的索引,地址的计算规则是一样的,也就是往前找一个地址(其实给多小的数和多大的数都无所谓,C没有边界检查,可能会 阅读全文
posted @ 2025-07-22 15:08 最爱丁珰 阅读(6) 评论(0) 推荐(0)
摘要: 补充一下代码说明 inter_upperlefts和inter_lowerrights就是交集的左上角和右上角 None的作用是添加一个大小为1的新维度用于广播 取max和min的操作都是正确的,可以想一下 阅读全文
posted @ 2025-07-21 18:31 最爱丁珰 阅读(9) 评论(0) 推荐(0)
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 132 下一页