Busca la funcion que necesitas!

martes, 10 de mayo de 2011

FASM - Strlen, longitud de una cadena

Bueno he mejorado una función que cuenta los caracteres que hay en una cadena en FASM, dejé, creo yo, bien comentado el source, pero ya saben que cualquier duda, pregunta, crítica o problema la pueden comentar en la entrada.



Código:
include 'win32ax.inc'
.data
;variables
cadena          db "linkenOS",0
salida          db ?,0

.code
  inicio:
    ;Limpiamos registros
    XOR ESI,ESI
    XOR EDI,EDI
    XOR ECX,ECX
    ;Movemos la cadena a
    ;el registro ESI
    LEA ESI,[cadena]
    ;Llamamos a la funcion
    CALL strlen
    ;Mostramos con la API
    ;MessageBox de windows
    ;El resultado 'salida'
    invoke MessageBoxA,0,salida,"xD",0
    RET
.end inicio
;-FUNCION STRLEN-;
;Coder: Linkgl
proc strlen
   siguiente:
   ;Cortamos el primer caracter
   LODSB
   ;Comparamos si es el ultimo
   CMP AL,0
   ;Si ya no hay más saltamos a salir
   JE SALIR
   ;Incrementamos el contador
   INC ECX
   ;Entramos en bucle hasta que la
   ;comparacion retorne un flag verdadero
   JMP siguiente
   SALIR:
   ;Movemos el contador al registro AL
   ;Para trabajar con el
   MOV AL,CL
   ;Le sumamos 30(hex)
   ;para devolver valores numericos en ascii
   ADD AL,0x30
   ;Movemos el contenido de AL en la variable de salida
   MOV [salida],AL
   RET
endp   

lunes, 9 de mayo de 2011

C - Llamar a una función desde la dll

Les dejo un código donde muestro cómo cargar una API o función desde una librería dll, es muy sencillo, lo que se necesita hacer es definir el tipo de la función con los parámetros, cargarlo como estructura y despues buscar la direccion de la funcion en la dll para poder utilizarla, el código habla por mi.

PD: Pueden encontrar la estructura de las API's en la página de la msdn

Código:
#include <windows.h>

//Definimos una nueva funcion (API)
//Con todos sus parámetros
typedef INT (WINAPI *_MessageBox)(
  HWND hWnd,
  LPCTSTR lpText,
  LPCTSTR lpCaption,
  UINT uType
);

int main()
{
   //Declaramos a __MessageBox como si fuera estructura
    //de _Messagebox colocandole un valor nulo (Limpiando)
    _MessageBox __MessageBox = NULL;
    //Llamamos a obtener la dirección de la función
    __MessageBox = (_MessageBox)GetProcAddress(GetModuleHandle("User32.dll"), "MessageBoxA");
    //Usamos la función
    __MessageBox(NULL,"soy extraido de la dll","",NULL);
    return 0;   
}

_____

lunes, 2 de mayo de 2011

DELPHI - Leer bytes en hex

Esta función te devuelve una string con los bytes EN HEX del rango indicado, ejemplo:

Código:
Salida:=LeerXbytes('c:\miarchivo.exe',32,39);

Me devolvera los bytes 32 33 34 35 36 37 38 39 que tenga el archivo pero no los simbolos raros, los convierte a hex como si estuvieras viendo esos archivos en un editor hex es decir me va a devolver algo como:

00010D00E00FF210

Dependiendo de los bytes que estén en el rango jeje pero no confundan no devuelve los caracteres en ascii los convierte a hex, jeje use parte de esto en el programa de los firmware's de ps3

Funcion:


Código:
function LeerXbytes(ruta:String;inicio, fin:Integer):String;
{
  * Coder: Linkgl
  * Indetectables Coders Team :D
}
var x:Integer;
var a:Char;
var fp:TFileStream;
var Temp:String;
begin
fp:=TFileStream.Create(ruta,fmOpenRead);
for x:=inicio to fin do
begin
fp.Seek(x,soFromBeginning);
fp.Read(a,1);
Temp:=Temp+IntToHex(ord(a),2);
end;
fp.Free;
Result:=Temp;
end;