Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
X86 你是如何制作汇编程序的?_X86_Assembly - Fatal编程技术网

X86 你是如何制作汇编程序的?

X86 你是如何制作汇编程序的?,x86,assembly,X86,Assembly,我想做一个简单的x86汇编程序。我想知道是否有制作自己的汇编程序的教程。或者如果有一个简单的汇编程序,我可以学习 此外,我想知道在查看和处理二进制/十六进制程序时使用了哪些工具。就示例代码而言 不过,我不知道有任何“简单”的汇编程序。我很久以前写过一个。它非常简单,只需从英特尔获得x86汇编程序参考指南,然后将字节写入.com文件(适用于windows)。我希望我能找到我以前在论坛上写的帖子。它是用英文写的。只是为了证明你可以用任何语言来做。只需标记您的字符串并对其进行翻译。这就是您要查

我想做一个简单的x86汇编程序。我想知道是否有制作自己的汇编程序的教程。或者如果有一个简单的汇编程序,我可以学习


此外,我想知道在查看和处理二进制/十六进制程序时使用了哪些工具。

就示例代码而言


不过,我不知道有任何“简单”的汇编程序。

我很久以前写过一个。它非常简单,只需从英特尔获得x86汇编程序参考指南,然后将字节写入.com文件(适用于windows)。我希望我能找到我以前在论坛上写的帖子。它是用英文写的。只是为了证明你可以用任何语言来做。只需标记您的字符串并对其进行翻译。

这就是您要查找的内容:

-免费提供()

当然,您将需要以下内容:

  • ELF文件格式规范:
  • 您可以随时参考开源汇编程序的实现:


  • 只是Delphi7中非常小的一段代码

    {$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.
    
    {$APPTYPE控制台}
    程序汇编程序;
    使用sysutils;
    常数
    3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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#+
    #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;
    变量
    f:字节文件;p、 i:整数;o:字符串;
    t:文本;行:字符串;
    程序w(s:字符串);
    开始
    i:=1;
    
    虽然iI更倾向于用C语言开发汇编程序,但中列出的一些参考可能将此作为编译阶段(有些可能不这样做)。[Related,not a replicate.]]还可以看看“如何编写反汇编程序?”这是有效的,也不太广泛;OP只是在寻找有关它的教程或资源。编写汇编程序对于堆栈溢出来说是否过于宽泛?高级人员..我正在编写自己的6502汇编编译器,我就是这样做的:使用正则表达式字符串来识别助记符(即命令),任何带有正则表达式回溯的特殊括号和特殊符号(用于不同的寻址模式),以及正则表达式十六进制、二进制和十进制识别。然后设置助记符识别例程来识别每个助记符的变体,只需将适当的字节发送到输出文件。你只需要一个助记符列表,它们的寻址模式,语法和操作码。你用了什么作为标题?我真的不记得了,因为已经快15年了,但我认为你不必为一个.com可执行文件做准备。我只是检查了一下,你是对的,.com没有标题,只有代码和数据。您是如何执行二进制文件的?你是否直接在Windows上执行?如果我记得正确,我只是在编译后从DOS的命令行调用.com。为什么Delphi而不是C或C++?我不认为有没有软件建设者使用德尔福了。你能翻译这个代码C或C++吗?我想给这个答案添加一点,但是以一种注释的形式:检查这个链接: