w tej chwili staram się dostać nieco bliżej do programowania asemblera i dlatego wyglądał na kod asemblera z łatwym programu Hello World:Co dokładnie oznacza <[email protected]>?
#include <stdio.h>
int main()
{
int i;
for(i=0; i<10; i++)
{
printf("Hello, world!\n");
}
return 0;
}
Teraz staram się zrozumieć, w jaki sposób pracować fiew proste rozkazy asemblera idąc krok po kroku przez asemblerze i analizując, co dokładnie się dzieje:
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
Problemem jest to, że ja naprawdę nie rozumiem tej linii:
0x0000000000400543 <+22>: call 0x400410 <[email protected]>
Próbowałem patrząc na adres 0x400410 na różne sposoby, ale ja naprawdę nie rozumiem, co to naprawdę robi:/Również nie wiem co to dokładnie oznacza: <[email protected]>
Byłoby naprawdę wspaniale, jeśli ktoś może mi pomóc to zrozumieć konkretna linia :) Pozdrowienia Sleepy
puts @ plt to wywołanie funkcji. http://www.cplusplus.com/reference/cstdio/puts/ – IdeaHat
Zobacz także [Co znaczy "@ plt" tutaj?] (https://stackoverflow.com/questions/5469274/what-does-plt-mean -tutaj) – DCoder
Wywołuje funkcję biblioteczną 'puts()', która drukuje twój tekst (zamiast 'printf()' - ponieważ nie przekazujesz żadnych parametrów, jest to równoważne wywołaniu prostszego/szybszego 'puts() ') –