in questo momento cerco di ottenere un po 'più vicino alla programmazione assembler e quindi guardato il codice assembler di un semplice programma di mondo ciao:Che cosa significa esattamente <[email protected]>?
#include <stdio.h>
int main()
{
int i;
for(i=0; i<10; i++)
{
printf("Hello, world!\n");
}
return 0;
}
Ora cerco di capire come lavorare un fiew semplici comandi assemblatore, mentre andando passo per passo attraverso il codice assemblatore e analizzando cosa succede esattamente:
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
il problema è che realmente non capisce questa riga:
0x0000000000400543 <+22>: call 0x400410 <[email protected]>
Ho provato a guardare l'indirizzo 0x400410 in vari modi, ma io non realmente ottenere ciò di cui ha realmente:/Anche io non so cosa significa esattamente: <[email protected]>
sarebbe davvero bello se qualcuno mi potrebbe aiutare a capire questo riga specifica :) Saluti assonnati
puts @ plt è una chiamata di funzione. http://www.cplusplus.com/reference/cstdio/puts/ – IdeaHat
Vedi anche [Cosa significa '@ plt' qui?] (https://stackoverflow.com/questions/5469274/what-does-plt-mean -qui) – DCoder
Si chiama la funzione di libreria 'puts()' per stampare il testo (al posto di 'printf()' - poiché non si passa alcun parametro, equivale a chiamare il più semplice/veloce 'puts() ') –