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