Oppure

Loading
12/02/12 11:45
Dante.cpp
Appena sotto ho riportato il codice assembly, del programma:
#include <math.h>

int main() {
	sqrt(6);
}


passando il codice a gdb esso comincerà ad eseguirlo dall'istruzione "movl    Appena sotto ho riportato il codice assembly, del programma:
#include <math.h>

int main() {
	sqrt(6);
}


passando il codice a gdb esso comincerà ad eseguirlo dall'istruzione "movl    {parsed_message}, %eax", il mio problema è, perché? Inoltre se qualcuno fosse in grado di commentare le seguenti istruzioni gliene sarei molto grato!

	.file	"Xprovadebug.c"
	.text
	.globl	_start
	.type	_start, @function
_start:movl	{parsed_message}, %eax
.LFB0:
	.cfi_startproc
	pushl	%ebp
	.cfi_def_cfa_offset 8
	.cfi_offset 5, -8
	movl	%esp, %ebp
	.cfi_def_cfa_register 5
	movl	{parsed_message}, %eax
	popl	%ebp
	.cfi_def_cfa 4, 4
	.cfi_restore 5
	ret
	.cfi_endproc
.LFE0:
	.size	_start, .-_start
	.ident	"GCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1"
	.section	.note.GNU-stack,"",@progbits


Come si può notare, il codice è stato ricavato con gpp poi ho sostituito l'etichetta main con _start per compilare poi con "as"., %eax", il mio problema è, perché? Inoltre se qualcuno fosse in grado di commentare le seguenti istruzioni gliene sarei molto grato!

	.file	"Xprovadebug.c"
	.text
	.globl	_start
	.type	_start, @function
_start:movl	Appena sotto ho riportato il codice assembly, del programma: 

#include <math.h>

int main() {
	sqrt(6);
}


passando il codice a gdb esso comincerà ad eseguirlo dall'istruzione "movl    {parsed_message}, %eax", il mio problema è, perché? Inoltre se qualcuno fosse in grado di commentare le seguenti istruzioni gliene sarei molto grato!

	.file	"Xprovadebug.c"
	.text
	.globl	_start
	.type	_start, @function
_start:movl	{parsed_message}, %eax
.LFB0:
	.cfi_startproc
	pushl	%ebp
	.cfi_def_cfa_offset 8
	.cfi_offset 5, -8
	movl	%esp, %ebp
	.cfi_def_cfa_register 5
	movl	{parsed_message}, %eax
	popl	%ebp
	.cfi_def_cfa 4, 4
	.cfi_restore 5
	ret
	.cfi_endproc
.LFE0:
	.size	_start, .-_start
	.ident	"GCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1"
	.section	.note.GNU-stack,"",@progbits


Come si può notare, il codice è stato ricavato con gpp poi ho sostituito l'etichetta main con _start per compilare poi con "as"., %eax .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 movl Appena sotto ho riportato il codice assembly, del programma:
#include <math.h>

int main() {
	sqrt(6);
}


passando il codice a gdb esso comincerà ad eseguirlo dall'istruzione "movl    {parsed_message}, %eax", il mio problema è, perché? Inoltre se qualcuno fosse in grado di commentare le seguenti istruzioni gliene sarei molto grato!

	.file	"Xprovadebug.c"
	.text
	.globl	_start
	.type	_start, @function
_start:movl	{parsed_message}, %eax
.LFB0:
	.cfi_startproc
	pushl	%ebp
	.cfi_def_cfa_offset 8
	.cfi_offset 5, -8
	movl	%esp, %ebp
	.cfi_def_cfa_register 5
	movl	{parsed_message}, %eax
	popl	%ebp
	.cfi_def_cfa 4, 4
	.cfi_restore 5
	ret
	.cfi_endproc
.LFE0:
	.size	_start, .-_start
	.ident	"GCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1"
	.section	.note.GNU-stack,"",@progbits


Come si può notare, il codice è stato ricavato con gpp poi ho sostituito l'etichetta main con _start per compilare poi con "as"., %eax popl %ebp .cfi_def_cfa 4, 4 .cfi_restore 5 ret .cfi_endproc .LFE0: .size _start, .-_start .ident "GCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1" .section .note.GNU-stack,"",@progbits


Come si può notare, il codice è stato ricavato con gpp poi ho sostituito l'etichetta main con _start per compilare poi con "as".
aaa
12/02/12 11:47
nessuno
Ma la domanda è perché il programma viene eseguito dalla prima istruzione?

La risposta è ovvia ...

O non ho capito?

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
12/02/12 13:17
Dante.cpp
L'istruzione
movl    L'istruzione 
movl    {parsed_message}, %eax
è nella riga 13. non mi pare la prima istruzione! :D, %eax
è nella riga 13. non mi pare la prima istruzione! :D
aaa
12/02/12 13:28
nessuno
Ma ti occupi di assembly senza avere le cognizioni di base?

La mov è la prima istruzione macchina per la CPU, le altre righe contengono direttive dell'assembler e c'è differenza
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
12/02/12 13:45
Dante.cpp
Si, ho studiato un po di assembly z80 come introduzione, ma nell'architettura x86 ci sono entrato solo ieri!
Forse involontariamente, hai comunque dato risposta al quesito. Ora so che le prime istruzioni sono direttive per il compilatore; tipo l'istruzione ORG in asmZ80, che dice al compilatore da quale locazione dovrà iniziare ad assemblare. Ecco spiegato perché gdb iniziava l'analisi dalla riga 13.
Avresti un po di documentazione da passarmi; oppure puoi darmi una mano commentando il codice?
Ultima modifica effettuata da Dante.cpp 12/02/12 13:53
aaa
12/02/12 14:53
nessuno
Postato originariamente da Dante.cpp:

Si, ho studiato un po di assembly z80 come introduzione, ma nell'architettura x86 ci sono entrato solo ieri!


Non fa differenza ... le direttive le prevedono tutti gli assembler ...

Forse involontariamente, hai comunque dato risposta al quesito.


Non direi proprio "involontariamente" ...

Ecco spiegato perché gdb iniziava l'analisi dalla riga 13.


:-|

Avresti un po di documentazione da passarmi; oppure puoi darmi una mano commentando il codice?


La documentazione di cosa? L'assembly x86 è "enorme" ... puoi iniziare dai manuali Intel originali (migliaia di pagine ...) ...

Commentare quel codice non ti servirebbe a nulla ... se devi imparare, prendi qualche libro e inizia dall'abc
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
12/02/12 19:25
Dante.cpp
Non mi occorreva una critica della mia risposta, comunque il problema è stato risolto grazie. Perdono se la mia umile conoscenza non è ai tuoi livelli celestiali! :k:
Ultima modifica effettuata da Dante.cpp 12/02/12 19:26
aaa
12/02/12 19:44
nessuno
Postato originariamente da Dante.cpp:

Non mi occorreva una critica della mia risposta, comunque il problema è stato risolto grazie. Perdono se la mia umile conoscenza non è ai tuoi livelli celestiali! :k:


Non faccio nessuna critica "inutile" ma ti sto dicendo esattamente come stanno le cose.

Basta dire che non vuoi accettare i consigli che ti vengono dati ... senza stupida ironia ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.