|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2010
Messaggi: 24
|
[Assembly] passare da funzione C a Assembly?
Salve,
sto studiando Assembly, in riferimento ai processore ARM e NIOS II e non sto capendo come fare a passare da una C a Assembly, cioè se ho una funziona scritta in C, vorrei sapere come trascriverla in Assembly e viceversa. Avete qualche guida da consigliarmi? Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
guarda, a mio parere il miglio metodo è partire dalle istruzioni in C che ti interessano e disassemblarle per prendere spunto dal metodo utilizzato dal tuo compilatore, un piccolo esempio su Linux:
Codice:
root@matteo2:~# cat hello.c
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
}
root@matteo2:~# gcc -static -g hello.c
root@matteo2:~# gdb a.out -q
Reading symbols from /root/a.out...done.
(gdb) disass main
Dump of assembler code for function main:
0x08048250 <+0>: push %ebp
0x08048251 <+1>: mov %esp,%ebp
0x08048253 <+3>: and $0xfffffff0,%esp
0x08048256 <+6>: sub $0x10,%esp
0x08048259 <+9>: movl $0x80a7708,(%esp)
0x08048260 <+16>: call 0x8048d50 <puts>
0x08048265 <+21>: leave
0x08048266 <+22>: ret
End of assembler dump.
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jul 2010
Messaggi: 24
|
Ciao teo@unix,
il mio problema è proprio questo: disassemblare le funzioni. Sono agli inizi con assembler, e non ho trovato nessun valido tutorial o guida su cui studiare. Perciò sono alla ricerca di fonti, guide e quant'altro possa servirmi per capire queste problematiche (disassemblaggio/assemblaggio) di assembly. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
ok, ma il tuo obiettivo è studiare il linguaggio assembly oppure capire un listato di disassemblato? Certo che il secondo presuppone un minimo di conoscenze del primo.... però le due cose sono diverse.
Ad esempio io spesso vado a vedere come le funzioni lavorano disassemblando, ma non so se riuscirei a scrivere un intero programma in assembly ora come ora. La pratica di disassemblare i programmi per capire come funzionano è un pò ostica e richiede molto tempo ma non è impossibile. La programmazione in assembly diventa sepre più rara a favore del C e riguarda solitamente i microcontrollori, mentre l'attività di reversing del codice viene di solito fatta per indagare sulla sicurezza dei programmi ecc... |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jul 2010
Messaggi: 24
|
In pratica io sto studiando assembly orientaro ai processori NIOS II e ARM, ma son ancora agli inizi.
Il problema è che, come dicevo, dovrei riuscire a passare da una semplice funzione C al suo equivalente in assembly. Intendo dire una semplice funzione C, come una funzione che calcola il MAX tra due numeri, o roba simile. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
a ho capito, ok allora nel caso di ARM le istruzioni generate sono assai diverse da quelle dell'esempio.
Non mi intendo di architettura ARM, però a questo punto puoi iniziare da qui per quanto riguarda le istruzioni assembly: http://www.shell-storm.org/papers/files/664.pdf Ma mi viene spontaneo chiedermi/ti solitamente non si usano linguaggi di livello più elevato su ARM? Che io sappia si usa come minimo il C. Come mai mi chiedi dell'assmbly? |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Jul 2010
Messaggi: 24
|
Perchè principalmente sto studiando Assembly con seti di istruzioni per NIOS II e ARM e in piu dovrei sapere scrivere una funziona C data, nel rispettivo set di istruzioni assembly, sia in NIOS che in ARM.
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
per ARM ci sono anche questi:
http://www.ebook3000.com/ARM-Archite...nual_2343.html |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:45.



















