Assembly 从二进制可执行/C数组生成x86汇编代码

Assembly 从二进制可执行/C数组生成x86汇编代码,assembly,x86-64,Assembly,X86 64,我有一个包含二进制x86_64机器代码的C数组,我需要在Linux机器上将其转换为汇编代码。我在将C数组转换为二进制可执行文件方面没有问题,但找不到将其转换为asm代码的实用程序 有什么想法吗 谢谢 您可能正在寻找反汇编程序。反汇编程序获取机器代码(来自可执行文件或对象文件),并将其转换回人类可读的汇编语言。如果这是你需要的,看看 此处未列出的一些反汇编程序: IDA Pro:显然是最强大的反汇编程序之一。可能是为了你的目的而过度杀戮 NDISAM(伴随nasm汇编程序) 您可能正在寻找反汇

我有一个包含二进制x86_64机器代码的C数组,我需要在Linux机器上将其转换为汇编代码。我在将C数组转换为二进制可执行文件方面没有问题,但找不到将其转换为asm代码的实用程序

有什么想法吗


谢谢

您可能正在寻找反汇编程序。反汇编程序获取机器代码(来自可执行文件或对象文件),并将其转换回人类可读的汇编语言。如果这是你需要的,看看


此处未列出的一些反汇编程序:

  • IDA Pro:显然是最强大的反汇编程序之一。可能是为了你的目的而过度杀戮

  • NDISAM(伴随nasm汇编程序)


您可能正在寻找反汇编程序。反汇编程序获取机器代码(来自可执行文件或对象文件),并将其转换回人类可读的汇编语言。如果这是你需要的,看看


此处未列出的一些反汇编程序:

  • IDA Pro:显然是最强大的反汇编程序之一。可能是为了你的目的而过度杀戮

  • NDISAM(伴随nasm汇编程序)


    • 您需要一个反汇编程序。我个人使用NASM软件包中的NDISAM。

      您需要一个反汇编程序。我个人使用NASM软件包中的NDISAM。

      如果您能够链接到GPL代码,您可以链接到libbfd并让它为您反汇编阵列。如果您负担不起生成一个新进程来执行此操作,请执行此操作。

      如果您负担得起链接到GPL代码,您可以链接到libbfd并让它为您反汇编阵列。如果你负担不起产生一个新的过程,那么就这样做。

      我更喜欢libdisasm, 但是您可以随时调用objdump-D

      从我的抖动:

      #ifdef HAVE_LIBDISASM
      # define LINE_SIZE 255`
      char line[LINE_SIZE];
      int pos = 0;
      int insnsize;            /* size of instruction */
      x86_insn_t insn;         /* one instruction */
      
      x86_init(opt_none, NULL, NULL);
      while ( pos < size ) {
          insnsize = x86_disasm(code, size, 0, pos, &insn);
          if ( insnsize ) {
          x86_format_insn(&insn, line, LINE_SIZE, att_syntax);
          printf("(code+%3x): ", pos);
          for ( i = 0; i < 10; i++ ) {
              if ( i < insn.size ) printf(" %02x", insn.bytes[i]);
              else printf("   ");
          }
          printf("%s\n", line);
          pos += insnsize;
          } else {
          printf("Invalid instruction at 0x%x. size=0x%x\n", pos, size);
          pos++;
          }
      }
      x86_cleanup();
      #else
      fh = fopen("run-jit.bin", "w");
          fwrite(code,size,1,fh);
          fclose(fh);
          system("objdump -D --target=binary --architecture i386"
      #ifdef JIT_CPU_AMD64
                 ":x86-64"
      #endif
                 " run-jit.bin");
      #endif
      
      #如果定义有自由
      #定义行大小为255`
      字符行[行大小];
      int pos=0;
      int insnsize;/*教学规模*/
      x86_insn_t insn;/*一条指令*/
      x86_init(opt_none,NULL,NULL);
      while(pos
      我更喜欢libdisasm, 但是您可以随时调用objdump-D

      从我的抖动:

      #ifdef HAVE_LIBDISASM
      # define LINE_SIZE 255`
      char line[LINE_SIZE];
      int pos = 0;
      int insnsize;            /* size of instruction */
      x86_insn_t insn;         /* one instruction */
      
      x86_init(opt_none, NULL, NULL);
      while ( pos < size ) {
          insnsize = x86_disasm(code, size, 0, pos, &insn);
          if ( insnsize ) {
          x86_format_insn(&insn, line, LINE_SIZE, att_syntax);
          printf("(code+%3x): ", pos);
          for ( i = 0; i < 10; i++ ) {
              if ( i < insn.size ) printf(" %02x", insn.bytes[i]);
              else printf("   ");
          }
          printf("%s\n", line);
          pos += insnsize;
          } else {
          printf("Invalid instruction at 0x%x. size=0x%x\n", pos, size);
          pos++;
          }
      }
      x86_cleanup();
      #else
      fh = fopen("run-jit.bin", "w");
          fwrite(code,size,1,fh);
          fclose(fh);
          system("objdump -D --target=binary --architecture i386"
      #ifdef JIT_CPU_AMD64
                 ":x86-64"
      #endif
                 " run-jit.bin");
      #endif
      
      #如果定义有自由
      #定义行大小为255`
      字符行[行大小];
      int pos=0;
      int insnsize;/*教学规模*/
      x86_insn_t insn;/*一条指令*/
      x86_init(opt_none,NULL,NULL);
      while(pos
      linux上的标准反汇编程序是一个名为
      objdump
      的工具,它有一个非常简单的用例:

      假设我们有一个简单的
      helloworld
      ansic程序

      #include <stdio.h>
      
      int main() {
      
         printf("Hello world!\n");
         return 0;
      
      }
      
      #包括
      int main(){
      printf(“你好,世界!\n”);
      返回0;
      }
      
      在我名为
      hello.c
      的文件中,上面的代码就是我使用的代码。当我使用
      gcc
      编译并获取我的
      hello
      可执行文件时,我们将使用
      objdump
      进行快速转储转换。使用
      objdump-D hello
      时,我们得到以下输出:


      objdump
      非常适合快速反汇编C二进制文件的可执行部分。

      linux上的标准反汇编程序是一个名为
      objdump
      的工具,它有一个非常简单的用例:

      假设我们有一个简单的
      helloworld
      ansic程序

      #include <stdio.h>
      
      int main() {
      
         printf("Hello world!\n");
         return 0;
      
      }
      
      #包括
      int main(){
      printf(“你好,世界!\n”);
      返回0;
      }
      
      在我名为
      hello.c
      的文件中,上面的代码就是我使用的代码。当我使用
      gcc
      编译并获取我的
      hello
      可执行文件时,我们将使用
      objdump
      进行快速转储转换。使用
      objdump-D hello
      时,我们得到以下输出:


      objdump
      非常适合快速反汇编C二进制文件的可执行部分。

      该实用程序称为反汇编程序。(如果您不知道)linux该实用程序称为反汇编程序。(如果您不知道)linux