Articles of assemblaggio

Per cosa si usano le direttive CFI in Gnu Assembler (GAS)?

Sembra che ci sia una direttiva .CFI dopo ogni riga e ci sono anche molte varianti di questi ex., .cfi_startproc , .cfi_endproc ecc. .cfi_endproc qui . .file “temp.c” .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 movq %rsp, %rbp .cfi_offset 6, -16 .cfi_def_cfa_register 6 movl $0, %eax leave ret .cfi_endproc […]

Parentesi confuse in MASM32

Sto cercando di fare i conti con MASM32 e sono confuso dal seguente: Ho pensato che le parentesi fossero usate come riferimento indiretto, quindi se ho una variabile predefinita .data item dd 42 poi mov ebx, item metterebbe il contenuto di ‘item’, cioè il numero 42, in ebx e mov ebx, [item] metterebbe l’indirizzo di […]

Come rappresentare un valore esadecimale come FFFFFFBB nella programmazione di assembly in linea x86?

Sto imparando sulla programmazione in assembly x86. Volevo scrivere mov ecx, FFFFFFBB , tuttavia il compilatore non lo riconosce. Come dovrebbero essere scritti numeri esadecimali in codice assembler inline?

Può x86 riordinare un negozio ristretto con un carico più ampio che lo contiene completamente?

Il Manuale dello sviluppatore del software per le architetture Intel® 64 e IA-32 dice: 8.2.3.4 I carichi possono essere riordinati con i depositi precedenti in posizioni diverse Il modello di ordinamento della memoria Intel 64 consente di riordinare un carico con un negozio precedente in una posizione diversa. Tuttavia, i carichi non vengono riordinati con […]

Come vengono utilizzati i registri fs / gs in Linux AMD64?

Sull’architettura x86-64, due registri hanno uno scopo speciale: FS e GS. In Linux 2.6. *, Il registro FS sembra essere usato per memorizzare le informazioni locali del thread. È corretto? Cosa viene memorizzato in fs: 0? C’è qualche struttura C che descrive questo contenuto? Qual è allora l’uso di GS?

Come faccio a smontare il codice x86 grezzo?

Vorrei smontare l’MBR (primi 512 byte) di un disco x86 avviabile che ho. Ho copiato l’MBR in un file usando dd if=/dev/my-device of=mbr bs=512 count=1 Qualche suggerimento per un programma di utilità Linux in grado di smontare il file mbr ?

Il giusto comportamento non definito del turno se il conteggio è maggiore della larghezza del tipo?

Ho appena controllato lo standard C ++ . Sembra che il seguente codice NON debba essere un comportamento indefinito : unsigned int val = 0x0FFFFFFF; unsigned int res = val >> 34; // res should be 0 by C++ standard, // but GCC gives warning and res is 67108863 E dallo standard: Il valore di […]

Cosa fa il cltq in assembly?

0x0000000000400553 : mov -0x4(%rbp),%eax 0x0000000000400556 : cltq 0x0000000000400558 : shl $0x3,%rax 0x000000000040055c : mov %rax,%rdx In realtà il mio programma è semplice come: 5 int main(int argc, char *argv[]) { 6 int i = 0; 7 while(environ[i]) { 8 printf(“%s\n”, environ[i++]); 9 } 10 return 0; Ma l’output dell’assieme è piuttosto lungo: Dump of assembler […]

Cos’è un buon decompilatore C?

Sto cercando un decompilatore per un programma C. Il binario è un eseguibile Linux x86 a 32 bit. Objdump funziona bene, quindi in pratica sto cercando qualcosa che tenti di ribuild la sorgente C dalla sorgente asm.

Compilare l’assembly in Visual Studio

Come si compila il codice assembly utilizzando Visual Studio? Voglio compilare ed eseguire un file sorgente assembly in Visual Studio 2010 . Ho creato un progetto Visual C ++ e inserito un codice assembly in un file code.asm : .586 ;Target processor. Use instructions for Pentium class machines .MODEL FLAT, C ;Use the flat memory […]