Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eternal Idol

#3231
ASM / Re: Pregunta sobre ASM y WinAPI
23 Noviembre 2009, 00:10 AM
Aca los tenes (nada que ver con ese enlace que dejaste):
http://www.metasploit.com/users/opcode/syscalls.html

Dudo muchisimo que jamas agregues un servicio en un *NIX (salvo que se refiera a lo del enlace, un demonio).
#3232
ASM / Re: Pregunta sobre ASM y WinAPI
22 Noviembre 2009, 22:52 PM
Lo servicios son esos justamente, con sus respectivos numeros en la version especifica del Kernel que tengas. Como te decia antes en GNU/Linux podes ver como pthread usa los servicios futex o clone por ejemplo.

No soy un experto en *NIX justamente pero supongo que habra funciones POSIX que sean servicios directamente implementados y otras que esten basadas en otros servicios.
#3233
ASM / Re: Pregunta sobre ASM y WinAPI
22 Noviembre 2009, 20:29 PM
No veo que opendir sea un servicio. ¿Lo encontras en /usr/include/asm/unistd.h?

Practicamente nada se programa en ensamblador ya que no es portable.
#3234
ASM / Re: Pregunta sobre ASM y WinAPI
22 Noviembre 2009, 19:01 PM
Exactamente, en GNU/Linux podes ver como pthread usa los servicios futex o clone por ejemplo.
#3235
ASM / Re: Pregunta sobre ASM y WinAPI
22 Noviembre 2009, 18:01 PM
Si, en realidad la RTL esta programada de tal manea que usa los servicios del S.O. en cuestion siempre que sea necesario, podes comprobarlo depurando un programa escrito en C/C++.
#3236
ASM / Re: Pregunta sobre ASM y WinAPI
22 Noviembre 2009, 17:47 PM
Si, independientemente del lenguaje tenes que usar los servicios del S.O. (o en su defecto una libreria que los encapsule).
#3237
ASM / Re: Error al compilar
18 Noviembre 2009, 21:12 PM
Eso es para MASM de 16 bits (MS-DOS).
#3238
ASM / Re: Tamaño de word
18 Noviembre 2009, 08:02 AM
De nadas  ;D
#3239
ASM / Re: Tamaño de word
17 Noviembre 2009, 22:15 PM
Asi me funciona:

#include <stdio.h>

void function(){
int i;
unsigned char *p = (unsigned char*)&i+0xC;
*p += 0x1A;
}

void main(){
int j;
function();
j=5;
printf("\n%d\n",j);
j=6;
printf("\n%d\n",j);
}


Siendo main:
0x080483f3 <main+0>:    lea    0x4(%esp),%ecx
0x080483f7 <main+4>:    and    $0xfffffff0,%esp
0x080483fa <main+7>:    pushl  -0x4(%ecx)
0x080483fd <main+10>:   push   %ebp
0x080483fe <main+11>:   mov    %esp,%ebp
0x08048400 <main+13>:   push   %ecx
0x08048401 <main+14>:   sub    $0x24,%esp
0x08048404 <main+17>:   call   0x80483d4 <function>
0x08048409 <main+22>:   movl   $0x5,-0x8(%ebp) ;direccion original
0x08048410 <main+29>:   mov    -0x8(%ebp),%eax
0x08048413 <main+32>:   mov    %eax,0x4(%esp)
0x08048417 <main+36>:   movl   $0x8048510,(%esp)
0x0804841e <main+43>:   call   0x8048310 <printf@plt>
---Type <return> to continue, or q <return> to quit---
0x08048423 <main+48>:   movl   $0x6,-0x8(%ebp) ;direccion a la que queremos saltar
0x0804842a <main+55>:   mov    -0x8(%ebp),%eax
0x0804842d <main+58>:   mov    %eax,0x4(%esp)
0x08048431 <main+62>:   movl   $0x8048510,(%esp)
0x08048438 <main+69>:   call   0x8048310 <printf@plt>
0x0804843d <main+74>:   add    $0x24,%esp
0x08048440 <main+77>:   pop    %ecx
0x08048441 <main+78>:   pop    %ebp
0x08048442 <main+79>:   lea    -0x4(%ecx),%esp
0x08048445 <main+82>:   ret

Y function:
0x080483d4 <function+0>:        push   %ebp
0x080483d5 <function+1>:        mov    %esp,%ebp
0x080483d7 <function+3>:        sub    $0x10,%esp
0x080483da <function+6>:        lea    -0x8(%ebp),%eax
0x080483dd <function+9>:        add    $0xc,%eax
0x080483e0 <function+12>:       mov    %eax,-0x4(%ebp)
0x080483e3 <function+15>:       mov    -0x4(%ebp),%eax
0x080483e6 <function+18>:       movzbl (%eax),%eax
0x080483e9 <function+21>:       lea    0x1a(%eax),%edx
0x080483ec <function+24>:       mov    -0x4(%ebp),%eax
0x080483ef <function+27>:       mov    %dl,(%eax)
0x080483f1 <function+29>:       leave
0x080483f2 <function+30>:       ret

0x23-0x9=0x1A.
#3240
ASM / Re: Tamaño de word
17 Noviembre 2009, 17:18 PM
Si, la direccion de retorno ocupa 4 bytes, esta en la pila, cuando la funcion es llamada equivale justamente a ESP. Para obtenerla DENTRO de la funcion, cuando el prologo ya se ejecuto y el epilogo todavia no lo hizo tenes que sumarle el tamaño de bytes que resto (subl   $40, %esp) mas 4 (pushl %ebp).

ret = esp + (X + 4)

Siguiendo tu logica:
buf1|buf2|ESP|ret

ret = buf1 + sizeof(buf2) + 4

Lo mejor que podes hacer es depurarlo para comprobarlo.