"call 0x80482f0 <puts@plt>
"?Просто нужна помощь с одной строкой кода в программе «hello world» в сборке x86.
ПРИМЕЧАНИЕ: я запускаю ubuntu linux во время программирования / отладки, используя gcc в качестве компилятора и gdb для отладчика.
Я читаю Взлом: Искусство Эксплуатации V2 , и я собрал эту программу на C:
1 #include <stdio.h>
2
3 int main()
4 {
5 int i;
6 for(i=0; i<10; i++)
7 {
8 printf("Hello, world\n");
9 }
10 return 0;
в эту программу на ассемблере:
0x080483b4 <+0>: push ebp
0x080483b5 <+1>: mov ebp,esp
0x080483b7 <+3>: and esp,0xfffffff0
0x080483ba <+6>: sub esp,0x20
0x080483bd <+9>: mov DWORD PTR [esp+0x1c],0x0
0x080483c5 <+17>: jmp 0x80483d8 <main+36>
0x080483c7 <+19>: mov DWORD PTR [esp],0x80484b0
0x080483ce <+26>: call 0x80482f0 <puts@plt>
=> 0x080483d3 <+31>: add DWORD PTR [esp+0x1c],0x1
0x080483d8 <+36>: cmp DWORD PTR [esp+0x1c],0x9
0x080483dd <+41>: jle 0x80483c7 <main+19>
0x080483df <+43>: mov eax,0x0
0x080483e4 <+48>: leave
0x080483e5 <+49>: ret
сейчас .. я понимаю каждую часть этой программы, пока она не доберется до:
0x080483ce <+26>: call 0x80482f0 <puts@plt>
то, что я не понимаю, это ... если "Hello, world \ n" хранится в 0x80484b0, иэтот адрес затем сохраняется в адресе в ESP, почему:
0x080483ce <+26>: call 0x80482f0 <puts@plt>
ссылается на 0x80482f0 вместо [esp] или просто «0x80484b0», чтобы вывести «Hello, world \ n» на экран?я использовал gdb, и я не могу понять, на что именно ссылается 0x80482f0 .. любая помощь будет отличной
спасибо (и помните, я только начинаю с этого материала, так что я новичок)
также .. я скопировал и вставил разобранную основную функцию из gdb для удобства, если вам нужна дополнительная информация, просто спросите.и если вы хотели бы объяснить эту одну команду для меня, это было бы также хорошо, потому что я использовал только "int 80h" для вывода материала на экран до