Articles of x86

Perché il programma C compilato da GCC ha bisogno della sezione .eh_frame?

Il test è su Linux x86 a 32 bit con gcc 4.6.3 Quando si usa gcc per compilare un programma in C e usare readelf per controllare le informazioni sulla sezione, posso vedere le sezioni .eh_frame_hdr e .eh_frame_hdr all’interno. Ad esempio, ecco le informazioni sulla sezione del programma binario Perlbench . readelf -S perlbench There […]

È ansible chiamare una funzione non esportata che risiede in un exe?

Mi piacerebbe chiamare una funzione che risiede in un exe di terze parti e ottenere il suo risultato. Sembra che dovrebbe esserci un modo, purché conosca l’indirizzo della funzione, la chiamata-convenzione, ecc … ma non so come. Qualcuno sa come lo farei? Mi rendo conto che qualsiasi soluzione sarebbe un trucco non standard, ma deve […]

Cicli persi su Intel? Incoerenza tra rdtsc e CPU_CLK_UNHALTED.REF_TSC

Sulle recenti CPU (almeno negli ultimi dieci anni circa), Intel ha offerto tre contatori delle prestazioni hardware a funzione fissa, oltre a vari contatori delle prestazioni configurabili. I tre contatori fissi sono: INST_RETIRED.ANY CPU_CLK_UNHALTED.THREAD CPU_CLK_UNHALTED.REF_TSC Il primo conta le istruzioni ritirate, il secondo numero di cicli effettivi e l’ultimo è ciò che ci interessa. La […]

Memoria di programmazione dell’assemblaggio Assegnazione di EAX vs Ax, AH, AL

La mia comprensione dei registri di assembly dice che ogni registro può essere consultato dall’intero codice a 32 bit ed è suddiviso in più registri accessibili. In questo esempio, EAX è un registro a 32 bit, se chiamiamo AX dovrebbe restituire i primi 16 bit, e se chiamiamo AH o AL , dovrebbe restituire gli […]

Come richiamare una chiamata di sistema tramite sysenter nell’assembly inline?

Come possiamo implementare la chiamata di sistema usando sysenter / syscall direttamente in x86 Linux? Qualcuno può fornire aiuto? Sarebbe ancora meglio se fosse anche ansible mostrare il codice per la piattaforma amd64. So in x86, possiamo usare __asm__( ” movl $1, %eax \n” ” movl $0, %ebx \n” ” call *%gs:0x10 \n” ); indirizzare […]

Perché gli indirizzi di memoria virtuale per i binari di Linux partono da 0x8048000?

Disassemblando un binario ELF su un sistema Ubuntu x86 non ho potuto fare a meno di notare che la sezione del codice (.text) parte dall’indirizzo virtuale 0x8048000 e tutti gli indirizzi di memoria inferiori sembrano non essere utilizzati. Questo sembra essere piuttosto dispendioso e tutto ciò che emerge da Google è il folclore che coinvolge […]

x86 Assembly pushl / popl non funziona con “Errore: suffisso o operandi non validi”

Sono un principiante della programmazione di assembly, lavorando con Programming Ground Up su un desktop Ubuntu x86_64 con l’assemblatore GNU v2.20.1. Sono stato in grado di assemblare / colbind eseguire il mio codice, fino a quando non riesco a utilizzare le istruzioni pushl / popl per manipolare lo stack. Il seguente codice non riesce a […]

Perché lasciare “mov esp, ebp” nell’assemblaggio x86?

Si dice che l’istruzione leave sia la stessa di: mov esp,ebp pop ebp Ma cosa è mov esp,ebp qui? Non mi sembra valido …

Domanda LOCK x86 su CPU multi-core

È vero che il prefisso di comando “LOCK” di ASM x86 causa il blocco di tutti i core mentre viene eseguita l’istruzione che segue “LOCK”? Ho letto questo in un post sul blog e non ha senso. Non riesco a trovare nulla che indica se questo è vero o no.

Come scrivere un disassemblatore?

Mi interessa scrivere un dissomigiatore x86 come un progetto educativo. L’unica vera risorsa che ho trovato è Spiral Space, ” Come scrivere un disassemblatore “. Mentre questo dà una bella descrizione di alto livello dei vari componenti di un disassemblatore, sono interessato ad alcune risorse più dettagliate. Ho anche dato una rapida occhiata al codice […]