lúc tôi cố gắng để có được một chút gần gũi hơn với lập trình lắp ráp và do đó nhìn vào mã lắp ráp của một chương trình hello world dễ dàng:Chính xác thì <[email protected]> là gì?
#include <stdio.h>
int main()
{
int i;
for(i=0; i<10; i++)
{
printf("Hello, world!\n");
}
return 0;
}
Bây giờ tôi cố gắng tìm hiểu làm thế nào một fiew lệnh lắp ráp đơn giản làm việc trong khi đi từng bước thông qua các mã lắp ráp và phân tích chính xác những gì sẽ xảy ra:
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 <[email protected]>
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
vấn đề là tôi không thực sự hiểu dòng này:
0x0000000000400543 <+22>: call 0x400410 <[email protected]>
Tôi đã cố gắng nhìn vào địa chỉ 0x400410 theo những cách khác nhau nhưng tôi không thực sự có được nó những gì nó thực sự:/Ngoài ra tôi không biết điều này chính xác có nghĩa là: <[email protected]>
sẽ được thực sự tuyệt vời nếu ai đó có thể giúp tôi hiểu điều này dòng cụ thể :) Lời chào Sleepy
đặt @ plt là một cuộc gọi hàm. http://www.cplusplus.com/reference/cstdio/puts/ – IdeaHat
Xem thêm [@ plt' có nghĩa là gì ở đây?] (https://stackoverflow.com/questions/5469274/what-does-plt-mean -nó) – DCoder
Gọi hàm 'puts()' để in văn bản của bạn (thay cho 'printf()' - vì bạn không truyền bất kỳ tham số nào, nó tương đương với việc gọi đơn giản hơn/nhanh hơn 'puts() ') –