0x00000000004005c7 <+28>: movw $0x0,0x8(%rsp)
是否在字符串的末尾添加空字符?空字符汇编代码有人也可以解释前4行吗?
0x00000000004005ab <+0>: sub $0x28,%rsp 0x00000000004005af <+4>: mov %fs:0x28,%rax 0x00000000004005b8 <+13>: mov %rax,0x18(%rsp) 0x00000000004005bd <+18>: xor %eax,%eax 0x00000000004005bf <+20>: movq $0x64636261,(%rsp) 0x00000000004005c7 <+28>: movw $0x0,0x8(%rsp) => 0x00000000004005ce <+35>: mov %rsp,%rdi 0x00000000004005d1 <+38>: callq 0x40059d <func> 0x00000000004005d6 <+43>: mov $0x0,%eax 0x00000000004005db <+48>: mov 0x18(%rsp),%rdx 0x00000000004005e0 <+53>: xor %fs:0x28,%rdx 0x00000000004005e9 <+62>: je 0x4005f0 <main+69> 0x00000000004005eb <+64>: callq 0x400480 <[email protected]> 0x00000000004005f0 <+69>: add $0x28,%rsp 0x00000000004005f4 <+73>: retq
的C代码:
#include <stdio.h>
void func(char s[])
{
printf("%s\n", s);
}
int main()
{
char s[10] = "abcd";
func(s);
return 0;
}
感谢。
OS:
- Linux版本的17年9月4日-C9(gcc版本4.9.2(Debian的4.9.2-10))
CPU:
vendor_id:GenuineIntel
CPU家族:6
模型:63
模型名称:Intel(R)至强(R)CPU @ 2.30GHz
仍在阅读你的答案,多好的答案。我还添加了汇编代码的其余部分。 – dud3
增加了一些系统和编译器信息。 – dud3
但是为什么它会在之后将'eax'设置为零:'mov $ 0x0,%eax'? – dud3