小编Dee*_*dar的帖子

使用printf的%s说明符打印NULL的行为是什么?

遇到一个有趣的采访问题:

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)

c linux language-lawyer compiler-bug

48
推荐指数
4
解决办法
4万
查看次数

JMP指令 - 十六进制代码

对JMP机器指令的十六进制代码转换有疑问.我有要跳转的绝对地址,说"JMP 0x400835".首先,这是允许的吗?如果是,相应的十六进制代码是什么?如果没有,我可以先将地址存储在某个寄存器中,比如EAX,然后输入"JMP EAX"吗?我正在研究x86(64b)架构.

我试图从gdb中的diassem输出打印出十六进制代码,但没有一致性,即我没有在十六进制代码中看到目标地址.

我是十六进制代码和机器指令的新手,所以请原谅我的无知.

hex x86-64

13
推荐指数
2
解决办法
3万
查看次数

如何在C中分配32字节对齐的内存

在一个采访样本中遇到了这个问题.在如何仅使用标准库分配对齐的内存中已经回答了16字节对齐的分配

但是,我有一个特定的问题,关于用于将最后4位归零的掩码.已使用此掩码"~0F",使得结果地址可被16整除.对于32字节对齐/可分割,应采取哪些措施来实现相同的目的?

c memory-management

0
推荐指数
1
解决办法
8136
查看次数