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