elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


  Mostrar Mensajes
Páginas: 1 ... 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [39] 40 41 42 43
381  Programación / ASM / Re: Algunas dudas sobre ensambladores. en: 19 Mayo 2020, 18:14 pm
aunque no podrias enlazarlo con tlink como .COM sin el ORG 0100h
Por cierto... ¿como TLINK reconoce que se declaro ORG 100h si es una pseudo-instruccion?
382  Programación / ASM / Re: Algunas dudas sobre ensambladores. en: 18 Mayo 2020, 23:23 pm
Codigo tambien; _oldISR seria 0409h de otra manera
Sin embargo en este caso codigo tambien porque esta siendo referenciado por un label, ¿no?

No. Un .COM es un archivo sin siquiera una misera cabecera asi que se carga tal cual es, MS-DOS pone antes el PSP: "Since it lacks relocation information, it is loaded by the operating system at a pre-set address, at offset 0100h immediately following the PSP, where it is executed (hence the limitation of the executable's size): the entry point is fixed at 0100h." https://en.wikipedia.org/wiki/COM_file
Esta bien... pense que lo primero que se cargaba era el MCB del programa...
¿entonces el PSP mide 100 unidades hexadecimales?
383  Programación / ASM / Re: Algunas dudas sobre ensambladores. en: 18 Mayo 2020, 18:51 pm
Anyone who is looking to write a real bootloader will know not to make any assumptions because they understand the ramifications.

Precisamente esta es la razon por la cual hice este tema. Aunque no estaba programando un bootloader.

Hay algo que no me queda muy claro... se supone que ORG se utiliza para especificar el desplazamiento dentro del desplazamiento en el acceso a la memoria (datos). Sin embargo, ¿solo datos? ¿o añade este valor a otros tipos de referencias tambien?

Y otra cosa... ¿recuerdas el archivo hookTSR.asm en el libro de Bill Blunden?
Al inicio:

Citar
SEGMENT CSEG WORD 'code'
ASSUME CS:CSEG, SS:CSEG, DS:CSEG
ORG 100h
...

¿que es lo que sucede cuando se ensambla la linea de codigo:

Citar
PUSHF
CALL CS:_oldISR
...
?

Si Windows carga los archivos COM identicamente como se encuentran en el archivo, ¿no se estaria especificando 100h unidades "extra" al direccionamiento, al especificar ORG 100h?
384  Programación / ASM / Re: Algunas dudas sobre ensambladores. en: 18 Mayo 2020, 12:58 pm
En el manual de TASM que te deje antes hay una explicacion. Un uso habitual - al menos para aprender - era este:
https://stackoverflow.com/questions/5611047/why-do-we-give-org-7c00-at-the-start-of-a-boot-program
¿a que te refieres con "al menos para aprender"?
Ya entiendo por que no se codifica... es una pseudo-instruccion. Aunque me haces dudar de si la entiendo plenamente con eso.
Ya habia entrado a ese link en busqueda de la misma respuesta, pero las ultimas dos respuestas no estaban, fueron las mas claras.
Respecto al manual de TASM, aun no llego a esa parte.

Gracias por responder.
Saludos.
385  Programación / ASM / Algunas dudas sobre ensambladores. en: 16 Mayo 2020, 21:39 pm
Hola,

tengo algunas inseguridades acerca de los ensambladores y me preguntaba si alguien conoce las respuestas.

¿para que sirve precisamente la instruccion ORG?
Se que delimita el origen del programa en la generacion de archivos COM pero, ¿a que se refiere esto precisamente? ¿No es el registro CS dependiente unicamente del cargador del sistema?

Lo mismo respecto a la instruccion LEA...
Se supone que esta instruccion carga la direccion efectiva (Load Effective Address), pero ¿como?, es decir:

si
Código
  1. mov dx, offset _data
  2.  

es lo mismo que
Código
  1. lea dx, _data
  2.  

¿como el procesador, en tiempo de ejecucion, sabe que es _data?. Me explico: ¿como puede cargarse la direccion efectiva de una direccion de memoria? es redundante... ¿por que no simplemente la primera instruccion? ¿o es LEA una instruccion del compilador que luego sustituye por MOV ..., OFFSET ..., en vez de ser parte del repertorio de instrucciones del procesador?

Saludos y gracias de antemano.
386  Programación / Programación General / Re: ¿Por que segmentacion? en: 16 Mayo 2020, 18:01 pm
tabla global de descriptores de segmento.
Si me permites otra pregunta, ¿cual fue la primera version de Windows y/o Linux que utilizo GDTs?

Gracias por tu respuesta. Resolviste ademas otra duda que tambien tenia.
Saludos.
387  Programación / Programación General / Re: ¿Por que segmentacion? en: 15 Mayo 2020, 18:44 pm
El modo más sencillo de espantar a alguien de la programación, es llenarlo de detalles crudos en fases tempranas.
El sol no se posa en manos que se quemen, si te deshaces de la llama es porque realmente no te gusta el fuego.

Saludos.
388  Programación / ASM / Re: Structured Exception Handler en: 15 Mayo 2020, 18:31 pm

Voy a leer esto antes de hacer las preguntas que tengo acerca de lo que dijiste en el ultimo mensaje.

Si vas a trabajar en Windows es el depurador por excelencia.

Hablando de depuradores... no se si sea mas adecuado hacer un nuevo tema pero ¿existe una manera de que un depurador -o un depurador en si que- tenga permisos de ring 0? (me refiero a acceder a la memoria, escribir en puertos, etc...).

Gracias por responder.
389  Programación / ASM / Re: Structured Exception Handler en: 13 Mayo 2020, 20:32 pm
Podemos ver que al principio:
dd fs:0 l1
0053:00000000  006ff930

dd 006ff930 l2
006ff930  006ff948 77a788c0

u 77a788c0 l1
ntdll!_except_handler4:
77a788c0 8bff            mov     edi,edi

dd 006ff948 l2
006ff948  ffffffff 77a853d2

u 77a853d2 l1
ntdll!FinalExceptionHandlerPad50:
77a853d2 90              nop

Y no seguimos que ffffffff debe ser el señalador de fin de cadena.

Ahora ejecutamos nuestro programa hasta MOV DWORD PTR FS:[0], ESP

dd fs:0 l1
0053:00000000  006ff8d0

 dd 006ff8d0 l2
006ff8d0  006ff930 008d101a ;en rojo la ultima estructura que existia hasta entonces

u 008d101a
seh+0x101a:
008d101a 6a01            push    1
008d101c e801000000      call    seh+0x1022 (008d1022)
008d1021 c3              ret


u 008d1022
seh+0x1022:
008d1022 ff2500208d00    jmp     dword ptr [seh+0x2000 (008d2000)]

dps 008d2000 l1
008d2000  754a4f20 KERNEL32!ExitProcessImplementation

De esto puedo intentar deducir un monton de cosas aunque no se utilizar WinDbg.

Citar
Podemos ver que al principio:
dd fs:0 l1
0053:00000000  006ff930

¿Entonces existe un solo manejador de excepcion el cual se encuentra en 053h:0?
(supongo que dd es un comando y tendra que ver con dump)

Código:
dd 006ff930 l2
006ff930  006ff948 77a788c0

u 77a788c0 l1
ntdll!_except_handler4:
77a788c0 8bff            mov     edi,edi

dd 006ff948 l2
006ff948  ffffffff 77a853d2

Imagino que esta es la estructura... ¿por que termina en 0ffffffffh? es decir ¿no deberia tener un tamano fijo?  :huh:

Código:
u 008d101a
seh+0x101a:
008d101a 6a01            push    1
008d101c e801000000      call    seh+0x1022 (008d1022)
008d1021 c3              ret

Bueno este debe ser el manejador... esto explica por que no podia repetirlo las veces que queria sin utilizar la pila.

Gracias por responder y disculpa mi ignorancia (jaja).
390  Programación / ASM / Structured Exception Handler en: 13 Mayo 2020, 18:56 pm
Hola,

pongo el tema aqui porque me refiero precisamente a su programacion en ensamblador.

Estoy intentando modificar el SEH para especificar la rutina de manejo de exception. Sin embargo lo hice de esta manera:

Código
  1. MOV ESI, OFFSET handler
  2. MOV DWORD PTR FS:[0], ESI
  3. ;...
  4.  

Y no funciono. Luego busque un poco en internet y encontre esto:

Código
  1. MOV ESI, OFFSET handler
  2. PUSH ESI
  3. PUSH DWORD PTR FS:[0] ;supongo que esto se utiliza como algun tipo de firma
  4. MOV DWORD PTR FS:[0], ESP
  5. ;...
  6.  

Este si funciona. Lo que no entiendo es por que.
¿alguien sabe por que, o en donde podria encontrar una explicacion?

Saludos y gracias de antemano.
Páginas: 1 ... 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [39] 40 41 42 43
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines