Es decir como convertir una cadena de texto que representa numeros hexadecimales a su valor real , este codigo acepta cualquiera de las formas Ej
"x\09x\82\x76"
"0x68, 0x6F, 0x6C, 0x61, 0x20"
incluso una mescla de ellas EJ>
"0x68, 0x6F,\x55\x8B\xEC\x32\xD2\x83\xEC\x10\xC6\x45\xF1\x63\xC6\x45\xF2\x61"
ahex2hex Proc datos:dword,destino:dword,long:dword
mov edx,[datos]
repetimos:
xor eax,eax
mov ecx,2
mmmms:
mov al,byte ptr ds:[ecx+edx-1]
;;;;;;;;;;;;;;;;;;;;Plugin para ignorar caracteres (ignore "space" "x" "," "\r\n" "\" "/")
;;;; This is a plugin , you can delete.
cmp al,020h ; El espacio , de encontrarse se ignora
jnz noespace
jmp finmal
noespace:
cmp al,02Ch ; La ","
jnz nocoma
jmp finmal
nocoma:
cmp al,078h ; The "x"
jnz noequis
jmp finmal
noequis: ;Chequeamos si hay una nueva linea , Now we check for newline (for windows)
cmp al,05Ch ; The "\"
jnz barra
jmp finmal
barra:
cmp al,02Fh ; The "/"
jnz newline
jmp finmal
newline:
cmp al,00Dh ; The "\r"
jnz noreturn
jmp finmal
noreturn:
cmp al,00Ah ; The "\n"
jnz googC
finmal:
inc edx
jmp repetimos ; Repetimos
;;;;;;;;;;;;;;;;;;;;;;Plugin -para ignorar caracteres (-to ignore some chars)
googC:
sub al,041h
jc negativo; Si es menor que CERO
add al,0Ah
jmp positivo
negativo: ; Le sumamos 17
add al,011h
positivo: ; Si es positivo , solo lo corremos
shl eax,8
loop mmmms
;;;; Arreglo final (ver en un Dbugger)
shr eax,8
xchg al,ah
shl al,4
shr eax,4
;;;;;;;;;;;;;;
mov ecx,dword ptr ds:[destino]
mov [ecx],al
dec long
jz salimos
inc edx
inc edx
inc dword ptr ds:[destino]
jmp repetimos
salimos:
ret
ahex2hex endp
Cualquier duda me dicen !!.
Muy interesante, luego lo miro a fondo ;D
Solo te ha faltado añadir que omita '&' y 'H' para que acepte el sistema de VB :P
Si , es muy fácil que acepte la H y &
Solo debes de saber el numero hexadecimal de esos caracteres
48 y 26 , entonces agregarlo es muy fácil.:
noreturn:
hachekarmany:
cmp al,048h ; La "H" para karmany
jnz ampersand
jmp finmal
ampersand:
cmp al,026h ; La "&" para karmany
jnz continuamos
jmp finmal
continuamos:
---------
Solo debes de agregar ese código después de la etiqueta noreturn:
Ves que fácil es ASM .
Se me olvido decir que el codigo acepta minusculas o mayusculas , no importa como lo escribas. Fc 1A 2a etc..
No entiendo muy bien la utilidad del código.
Si ya tienes esos opcodes en un array en c basta con abrirlo con un debugger y apuntar la ventana de código al inicio de la memoria que corresponda a ese array para tener las instrucciones y poder copiar/pegar a tu código asm.
Si lo haces para ejecutar el código directamente a partir del código máquina en hexa, en c sería algo como:
char codigo[]="0x68, 0x6F,\x55\x8B\xEC\x32\xD2\x83\xEC\x10\xC6\x45\xF1\x63\xC6\x45\xF2\x61";
typedef void (*tfuncion)();
tfuncion f;
f=(tfuncion)codigo;
f();
No necesitarías bajar a asm, pero de todos modos en asm sería igual de fácil, algo como:
codigo dw 68h, 6fh, 55h
jmp ds:dw
Por último, si en mi código tengo alguno de los códigos correspondientes a los carácteres especiales me estarás obviando código y me fallará posteriormente.
Saludos!
Si , eso es cuando tienes el compilador , pero en el caso que desees algun tipo de convercion despues de compilar , puede usar este codigo.