目前我试图更接近汇编程序编程,因此查看了一个简单的hello world程序的汇编程序代码:
#include <stdio.h> int main () { int i; for(i=0; i<10; i++) { printf("Hello,world!\n"); } return 0; }
现在我尝试理解fiew简单汇编程序命令如何工作,同时逐步执行汇编程序代码并分析究竟发生了什么:
0x000000000040052d <+0>: push rbp 0x000000000040052e <+1>: mov rbp,rsp 0x0000000000400531 <+4>: sub rsp,0x10 0x0000000000400535 <+8>: mov DWORD PTR [rbp-0x4],0x0 0x000000000040053c <+15>: jmp 0x40054c <main+31> 0x000000000040053e <+17>: mov edi,0x4005e4 0x0000000000400543 <+22>: call 0x400410 <puts@plt> 0x0000000000400548 <+27>: add DWORD PTR [rbp-0x4],0x1 0x000000000040054c <+31>: cmp DWORD PTR [rbp-0x4],0x9 0x0000000000400550 <+35>: jle 0x40053e <main+17> 0x0000000000400552 <+37>: mov eax,0x0 0x0000000000400557 <+42>: leave 0x0000000000400558 <+43>: ret
问题是我真的不明白这一行:
0x0000000000400543 <+22>: call 0x400410 <puts@plt>
我尝试以各种方式查看地址0x400410,但我真的不明白它真正做到了:/我也不知道这究竟意味着什么:< puts @ plt>
如果有人能帮助我理解这条特定的路线,那真的很棒:)
问候困了