遇到一个有趣的采访问题:
test 1:
printf("test %s\n", NULL);
printf("test %s\n", NULL);
prints:
test (null)
test (null)
test 2:
printf("%s\n", NULL);
printf("%s\n", NULL);
prints
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
虽然这可能在某些系统上运行良好,但至少我的方法正在抛出一个分段错误.这种行为最好的解释是什么?以上代码在C中.
以下是我的gcc信息:
deep@deep:~$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Run Code Online (Sandbox Code Playgroud) 对JMP机器指令的十六进制代码转换有疑问.我有要跳转的绝对地址,说"JMP 0x400835".首先,这是允许的吗?如果是,相应的十六进制代码是什么?如果没有,我可以先将地址存储在某个寄存器中,比如EAX,然后输入"JMP EAX"吗?我正在研究x86(64b)架构.
我试图从gdb中的diassem输出打印出十六进制代码,但没有一致性,即我没有在十六进制代码中看到目标地址.
我是十六进制代码和机器指令的新手,所以请原谅我的无知.
在一个采访样本中遇到了这个问题.在如何仅使用标准库分配对齐的内存中已经回答了16字节对齐的分配?
但是,我有一个特定的问题,关于用于将最后4位归零的掩码.已使用此掩码"~0F",使得结果地址可被16整除.对于32字节对齐/可分割,应采取哪些措施来实现相同的目的?