Estoy empezando a depurar programas con GDB, y hacienod disas main me he encontrado con 2 opcodes que no cononzco. He bsucado por google, pero no he sacado nada en claro
SOn: leave y movl.
Movl me imagino que es algo de mover, por que si conozco Mov, peor no sé que pinta la L ahí.
Sobre leave, decir que me aparece dentro de otra función que no es main.
Código:
serch@serch-server:~/Escritorio$ gdb -q a.out
Leyendo símbolos desde /home/serch/Escritorio/a.out...(no se encontraron símbolos de depuración)hecho.
(gdb) run
Starting program: /home/serch/Escritorio/a.out
Hi ASM!
Program exited normally.
(gdb) disas main
Dump of assembler code for function main:
0x08048414 <+0>: push %ebp
0x08048415 <+1>: mov %esp,%ebp
0x08048417 <+3>: and $0xfffffff0,%esp
0x0804841a <+6>: call 0x8048428 <proc>
0x0804841f <+11>: mov $0x0,%eax
0x08048424 <+16>: mov %ebp,%esp
0x08048426 <+18>: pop %ebp
0x08048427 <+19>: ret
End of assembler dump.
(gdb) disas proc
Dump of assembler code for function proc:
0x08048428 <+0>: push %ebp
0x08048429 <+1>: mov %esp,%ebp
0x0804842b <+3>: sub $0x18,%esp
0x0804842e <+6>: mov 0x804a020,%eax
0x08048433 <+11>: mov %eax,%edx
0x08048435 <+13>: mov $0x8048520,%eax
0x0804843a <+18>: mov %edx,0xc(%esp)
0x0804843e <+22>: movl $0x8,0x8(%esp)
0x08048446 <+30>: movl $0x1,0x4(%esp)
0x0804844e <+38>: mov %eax,(%esp)
0x08048451 <+41>: call 0x8048344 <fwrite@plt>
0x08048456 <+46>: leave
0x08048457 <+47>: ret
End of assembler dump.
(gdb)
http://asm.sourceforge.net/articles/linasm.html#Syntax -> para el movl
leave = mov esp, ebp
pop ebp
Cita de: ctlon en 2 Julio 2010, 00:43 AM
http://asm.sourceforge.net/articles/linasm.html#Syntax -> para el movl
leave = mov esp, ebp
pop ebp
Gracias por responder :)
Cita de: Daemon Freedom en 2 Julio 2010, 00:28 AM
Movl me imagino que es algo de mover, por que si conozco Mov, peor no sé que pinta la L ahí.
Es específica en los ensambladores con sintaxis AT&T. El l es un sufijo de tamaño que te dice que está trabajando con dwords.
Para cambiar el tamaño, hay que cambiar el sufijo...
b = byte
w = word
l = dword
q = qword
Salu10.
Cita de: nicolas_cof en 6 Julio 2010, 15:54 PM
Cita de: Daemon Freedom en 2 Julio 2010, 00:28 AM
Movl me imagino que es algo de mover, por que si conozco Mov, peor no sé que pinta la L ahí.
Es específica en los ensambladores con sintaxis AT&T. El l es un sufijo de tamaño que te dice que está trabajando con dwords.
Para cambiar el tamaño, hay que cambiar el sufijo...
b = byte
w = word
l = dword
q = qword
Salu10.
Tenia entendido que AT&T y Intel eran los mismos, y sin embargo en Intel creo que hay otros xDD
Saludos
Cita de: Debci en 6 Julio 2010, 16:00 PMTenia entendido que AT&T y Intel eran los mismos, y sin embargo en Intel creo que hay otros xDD
CitarParameter Size
AT&T: Mnemonics are suffixed with a letter indicating the size of the operands (e.g., "q" for qword, "l" for dword, "w" for word, and "b" for byte)
Intel: Derived from the name of the register that is used (e.g., eax, ax, al)
Fuente: Wikipedia (http://en.wikipedia.org/wiki/X86_assembly_language#Mnemonics_and_opcodes)
Salu10.
Cita de: nicolas_cof en 6 Julio 2010, 16:18 PM
Cita de: Debci en 6 Julio 2010, 16:00 PMTenia entendido que AT&T y Intel eran los mismos, y sin embargo en Intel creo que hay otros xDD
CitarParameter Size
AT&T: Mnemonics are suffixed with a letter indicating the size of the operands (e.g., "q" for qword, "l" for dword, "w" for word, and "b" for byte)
Intel: Derived from the name of the register that is used (e.g., eax, ax, al)
Fuente: Wikipedia (http://en.wikipedia.org/wiki/X86_assembly_language#Mnemonics_and_opcodes)
Salu10.
Grax por la info ;D
Saludos