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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT  (Leído 7,419 veces)
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« en: 20 Noviembre 2021, 14:18 pm »

Hola,

Estoy jugando con un depurador y cuando intente hacer una llamada a CreateFileA, LastError se setea a ERROR_NOACCESS y LastStatus a STATUS_DATATYPE_MISALIGNMENT. No entiendo que significa...

Pense que se referia a que la referencia al nombre del archivo ("hello.txt") se encontraba en una posicion de memoria desalineada a 4 bytes, pero aun cuando la alinee a 4 bytes sigue retornando lo mismo.

Aqui esta el disassemble:

Citar
00007FF755211016 | mov qword ptr ss:[rsp+30],0             |
00007FF75521101F | mov dword ptr ss:[rsp+28],80            |
00007FF755211027 | mov dword ptr ss:[rsp+20],2             |
00007FF75521102F | mov r9d,0                               |
00007FF755211035 | mov r8d,0                               |
00007FF75521103B | mov edx,40000000                        |
00007FF755211040 | lea rcx,qword ptr ds:[7FF7552110A4]     | 00007FF7552110A4:"hello.txt"
00007FF755211047 | mov rax,qword ptr ds:[<&CreateFileA>]   |
00007FF75521104E | call rax                                |
00007FF755211050 | mov qword ptr ss:[rbp-8],rax            |

(el handle lo guardo en rbp-8)

Arquitectura x86_64

7FF7552110A4: direccion del nombre del archivo ("hello.txt")

Equivalente en C:

Código
  1. hFile=CreateFileA("hello.txt",
  2.                      GENERIC_WRITE,
  3.                      0,
  4.                      NULL,
  5.                      CREATE_ALWAYS,
  6.                      FILE_ATTRIBUTE_NORMAL,
  7.                      NULL);

Gracias...


En línea

Eternal Idol
Kernel coder
Colaborador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #1 en: 20 Noviembre 2021, 16:34 pm »

En teoria no deberia ser un problema del primer parametro pasado a CreateFileA, esto funciona por ejemplo:

Código
  1. extrn CreateFileA:   PROC
  2.  
  3. PUBLIC entry
  4. .data
  5. msg db "hello.txt", 0
  6.  
  7. .code
  8. entry:
  9. mov qword ptr [rsp + 030h], 0
  10. mov dword ptr [rsp + 028h], 80
  11. mov dword ptr [rsp + 020h], 2  
  12. mov r9d, 0
  13. mov r8d, 0
  14. mov edx, 040000000h
  15. lea rcx, offset msg
  16. inc rcx
  17. call CreateFileA

Adivinando (jugar con un depurador e intentar hacer una llamada es algo ambiguo, podes estar escribiendo codigo a mano dentro de la memoria del proceso por ejemplo) te diria que la pila en si misma, RSP, puede estar desalineada.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #2 en: 20 Noviembre 2021, 19:58 pm »

podes estar escribiendo codigo a mano dentro de la memoria del proceso por ejemplo

Es justo lo que intento hacer... Lo habia intentado hace tiempo pero ahora crei que lo podia lograr  :xD

No se que es exactamente lo que esta desalineado porque el mismo codigo en posiciones dadas de memoria diferentes el codigo funciona y crea el archivo.

 ¿Es decir que RSP tiene que estar alineado? Eso no lo sabia  :huh: pero tiene sentido



J*******deeeeeerrrrrrrrr tienes razon...
Muchisimas gracias por tu ayuda. Que tonto  :xD :xD :xD :xD

Se que la memoria principal en la arquitectura x86 se alinea a 4 bytes, o al menos eso tengo entendido. ¿Sabes por que esto es asi precisamente en Windows y en donde podria conseguir mas informacion al respecto? Siento que me voy a equivocar con esto varias veces.

Gracias de antemano...
Buenas noches.
« Última modificación: 20 Noviembre 2021, 20:03 pm por marax » En línea

Eternal Idol
Kernel coder
Colaborador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #3 en: 20 Noviembre 2021, 20:30 pm »

¿Es decir que RSP tiene que estar alineado? Eso no lo sabia  :huh: pero tiene sentido

Si. "The stack will always be maintained 16-byte aligned, except within the prolog (for example, after the return address is pushed), and except where indicated in Function Types for a certain class of frame functions."

https://docs.microsoft.com/en-us/cpp/build/stack-usage?view=msvc-170

Y es basicamente lo mismo para AMD64 System V ABI (https://coderedirect.com/questions/51914/why-does-the-x86-64-amd64-system-v-abi-mandate-a-16-byte-stack-alignment).

Por cierto asi provoque el mismo error, en cuanto hace un syscall se detecta el problema:
Código
  1. entry:
  2. push dx ;;;;;;;;;;;;;
  3. mov qword ptr [rsp + 030h], 0
  4. mov dword ptr [rsp + 028h], 80
  5. mov dword ptr [rsp + 020h], 2  
  6. mov r9d, 0
  7. mov r8d, 0
  8. mov edx, 040000000h
  9. lea rcx, offset msg
  10. call CreateFileA
  11. int 3

(299c.368c): Break instruction exception - code 80000003 (first chance)
cfe!entry+0x43:
00007ff7`74391043 cc              int     3
0:000> r eax
eax=ffffffff
0:000> !gle
LastErrorValue: (Win32) 0x3e6 (998) - Invalid access to memory location.
LastStatusValue: (NTSTATUS) 0x80000002 - {EXCEPTION}  Alignment Fault  A datatype misalignment was detected in a load or store instruction.
« Última modificación: 20 Noviembre 2021, 20:32 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #4 en: 20 Noviembre 2021, 20:55 pm »

except within the prolog

¿Que es el prologo? ¿El procedimiento en el que se esta ejecutando el procedimiento actual?

¿Y por que 16 precisamente...? Crei que eran cuatro (la "Palabra" de la mayoria de procesadores)

Frame functions... Eso no me suena de nada. Lo acabo de buscar y me aparece en contextos diferentes.



Respecto al syscall... Si, me lo imagine porque persegui la excepcion hasta kernel32 que es de donde venia

Código
  1.    entry:
  2.    push dx ;;;;;;;;;;;;;
  3.    mov qword ptr [rsp + 030h], 0
  4.    mov dword ptr [rsp + 028h], 80
  5.    mov dword ptr [rsp + 020h], 2  
  6.    mov r9d, 0
  7.    mov r8d, 0
  8.    mov edx, 040000000h
  9.    lea rcx, offset msg
  10.    call CreateFileA
  11.    int 3

Ufffffff......... Casi se me desvia la vista pensando en que DX es de 16 bits y no bytes. Aqui DX desalinea la pila por 2 bytes ¿No?

En línea

Eternal Idol
Kernel coder
Colaborador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #5 en: 20 Noviembre 2021, 23:00 pm »

https://en.wikipedia.org/wiki/Function_prologue_and_epilogue

"There are basically two types of functions. A function that requires a stack frame is called a frame function. A function that does not require a stack frame is called a leaf function."
https://docs.microsoft.com/en-us/cpp/build/stack-usage?view=msvc-170

rdx edx dx dl
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/x64-architecture
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #6 en: 20 Noviembre 2021, 23:41 pm »


Ah... No sabia que eso tenia nombre.

OK ya entiendo que es. Sin embargo no la relacion con el alineamiento. Citas:

Citar
The stack will always be maintained 16-byte aligned, except within the prolog

"Except within the prolog"

A que se refiere con "within"? No se que es lo que esta "Dentro" del prologo.

Gracias por tu ayuda...
En línea

Eternal Idol
Kernel coder
Colaborador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #7 en: 20 Noviembre 2021, 23:57 pm »

Las instrucciones que momentaneamente pueden dejar la pila desalineada.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #8 en: 21 Noviembre 2021, 00:13 am »

Las instrucciones que momentaneamente pueden dejar la pila desalineada.

Es decir que, traduciendo...

La pila sera siempre mantenida en un alineamiento de 16-bytes, excepto las instrucciones que momentaneamente pueden dejar la pila desalineada...?

"Excepto"

A que se refiere exactamente con "Excepto"?
En línea

Eternal Idol
Kernel coder
Colaborador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: CreateFileA retorna ERROR_NOACCESS + STATUS_DATATYPE_MISALIGNMENT
« Respuesta #9 en: 21 Noviembre 2021, 00:19 am »

No, no se dice eso, sacaste la parte del prologo, DENTRO del prologo se puede dejar la pila desalineada momentaneamente, eso es lo que dice. Si todavia no entendes lo que esta dentro del prologo lee de nuevo:
https://en.wikipedia.org/wiki/Function_prologue_and_epilogue

¿A que se refiere con excepto? ¿Es una pregunta en serio? ¿De verdad? Me rindo por un tiempo.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
hydra retorna demasiados passwords
Seguridad
winkpoo 2 4,352 Último mensaje 15 Octubre 2011, 17:34 pm
por winkpoo
[API Google] Acortar URL ??, no me retorna !!
PHP
Diabliyo 1 2,272 Último mensaje 24 Enero 2012, 16:03 pm
por ~ Yoya ~
Proceso que retorna 141 en Linux.
Programación C/C++
0xDani 6 3,091 Último mensaje 28 Octubre 2012, 14:30 pm
por 0xDani
Diferencias entre funcion que retorna y no retorna.
Programación C/C++
FKT 7 4,292 Último mensaje 21 Agosto 2015, 00:31 am
por FKT
Error utilizando CreateFileA en asm
ASM
otroWeyMas.nasm 3 1,319 Último mensaje 28 Junio 2024, 01:53 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines