tipos programas nivel lenguaje historia hechos ensamblador ejemplos bajo x86 assembly

x86 - nivel - programas hechos en lenguaje ensamblador



¿Cómo se hace un ensamblador? (4)

En lo que respecta al código de ejemplo ...

Sin embargo, no conozco ensambladores "simples".

Me gustaría hacer un ensamblador x86 simple. Me pregunto si hay algún tutorial para hacer tu propio ensamblador. O si hay un ensamblador simple que podría estudiar.

Además, me pregunto qué herramientas se utilizan para ver y manejar el binario / hex de programas.



Solo un pequeño fragmento de código en Delphi 7.

{$APPTYPE CONSOLE} program assembler; uses sysutils; const s1=#0#77#1#90#59#64#4#80#1#69#3#76#1#1#1#1#14#224#2#15#1#1#1#11#1#1#1#1#1#64#13+ #116#1#16#13#64#3#16#4#2#3#1#8#3#2#10#7#32#4#2#7#3#5#16#4#16#5#1#10#16#13#16#3+ #184#124#184#5#16#3#184#5#2#15#96#3#224#173#52#1#16#3#40#1#16#23#65#1#16#3#80#1+ #16#7#75#1#69#1#82#1#78#1#69#1#76#1#51#1#50#1#46#1#68#1#76#1#76#4#71#1#101#1+ #116#1#83#1#116#1#100#1#72#1#97#1#110#1#100#1#108#1#101#4#87#1#114#1#105#1#116+ #1#101#1#67#1#111#1#110#1#115#1#111#1#108#1#101#1#65#2#72#1#101#1#108#1#108#1+ #111#1#44#1#32#1#87#1#111#1#114#1#108#1#100#1#33#1#13#1#10#5#0; s3=#1#185#1#7#4#136#1#195#1#128#1#227#1#15#1#193#1#216#1#4#1#128#1#251#1#9+ #1#118#1#3#1#128#1#195#1#39#1#128#1#195#1#48#1#136#1#153#1#96#1#16#1#64#2#73#1+ #125#1#228#1#106#2#104#1#112#1#16#1#64#2#106#1#8#1#104#1#96#1#16#1#64#2#106#1+ #245#1#255#1#21#1#40#1#16#1#64#2#80#1#255#1#21#1#44#1#16#1#64#2#195; var f:file of byte;p,i:integer;o:string; t:text;line:string; procedure w(s: string); begin i:=1; while i<length(s) do begin inc(p,ord(s[i])); setlength(o, p); o[p]:=s[i+1]; inc(i,2); end; end; procedure al(b: byte); var a: longword;pc: pchar; begin a := strtoint(line); pc:=@a; o := o + chr(b) + pc^ + (pc+1)^ + (pc+2)^ + (pc+3)^; inc(p,5); // mov eax, imm32 end; begin assign(f,''out.exe''); rewrite(f); p:=1; w(s1); assignfile(t, ''''); reset(t); while not eof(t) do begin readln(t, line); line := trim(line); if copy(line,1,8) = ''mov eax,'' then begin system.delete(line,1,8); al($b8); // mov eax, imm32 end else if copy(line,1,8) = ''add eax,'' then begin system.delete(line,1,8); al($05); // add eax, imm32 end else if copy(line,1,8) = ''and eax,'' then begin system.delete(line,1,8); al($25); // and eax, imm32 end end; closefile(t); w(s3); blockwrite(f,o[1],p); close(f); end.

El ensamblador solo entiende tres códigos de ensamblador diferentes "mov eax, immed32", "agregar eax, immed32", "y eax, immed32" y no contiene datos ni etiquetas. Producirá un pequeño ejecutable de Windows PE que emite eax en hexadecimal al final.

Atención: en mi caso, a avira free antivirus no le gusta el resultado. Es un falso positivo. Tuve que desconectar la protección en tiempo real. Verifique el resultado con un depurador si no está seguro si esto es un malware (¡no lo es!)


Yo escribí uno hace mucho tiempo. Es tan simple como obtener la guía de referencia del ensamblador x86 de Intel y escribir los bytes en un archivo .com (para Windows). Desearía poder encontrar mi antigua publicación en el foro que hice en ella. Fue escrito en D ++ . Solo sirve para mostrar que puedes hacerlo en cualquier idioma. Solo tokenize su cadena y tradúzcala.