C++ 使用objdump或gcc-c将汇编指令转换为二进制
我在缓冲炸弹实验室工作,有一件事我被卡住了。我已经编写了解决2级(鞭炮)的漏洞代码,但我不确定如何使用C++ 使用objdump或gcc-c将汇编指令转换为二进制,c++,gcc,assembly,x86,buffer-overflow,C++,Gcc,Assembly,X86,Buffer Overflow,我在缓冲炸弹实验室工作,有一件事我被卡住了。我已经编写了解决2级(鞭炮)的漏洞代码,但我不确定如何使用gcc-c将其转换为原始形式。 我从未编写过可编译的汇编文件,但我自己编写了指令,并跟踪了已编写的指令。。所以我知道它们是如何工作的,但我不确定如何从语法上编写代码文件本身 以下是我试图转换为原始格式的文件的当前内容: movl $0x1a4bb386, 0x804d200 push $0x0804915f ret 我需要向它添加什么,以便它可以使用gcc-c或objdump-d进行编译?
gcc-c
将其转换为原始形式。
我从未编写过可编译的汇编文件,但我自己编写了指令,并跟踪了已编写的指令。。所以我知道它们是如何工作的,但我不确定如何从语法上编写代码文件本身
以下是我试图转换为原始格式的文件的当前内容:
movl $0x1a4bb386, 0x804d200
push $0x0804915f
ret
我需要向它添加什么,以便它可以使用gcc-c
或objdump-d
进行编译?
我需要弄清楚这些指令占用多少字节,以及如何将它们插入缓冲区,以便编写缓冲区溢出漏洞
谢谢。使用gcc-m32-c代码.s编译 输出是一个文件代码。o 我使用objdump-dcode.o>code.asm获取所需的原始程序集和字节 输出:
code.o: file format elf32-i386
Disassembly of section .text:
00000000 <.text>:
0: c7 05 00 d2 04 08 86 movl $0x1a4bb386,0x804d200
7: b3 4b 1a
a: 68 5f 91 04 08 push $0x804915f
f: c3 ret
code.o:文件格式elf32-i386
第节的分解。正文:
00000000 :
0:c7 05 00 d2 04 08 86动产$0x1a4bb386,0x804d200
7:B34B1A
a:68 5f 91 04 08推送$0x804915f
f:c3 ret
我很好奇VA 0x7的指令是什么。。。这就是指令movl的其余部分吗?您需要阅读有关GNU汇编程序或GAS的内容。你也可以在C代码中插入汇编代码。我认为你的第一条指令在x86芯片组上是无效的。你有没有想过下载英特尔自己的非常详细的处理器手册?它包含所有助记符及其参数的描述,以及它们的十六进制符号。它应该是一个movl…编译好了。谢谢,我已经发布了一个答案,但我还有一个问题,请参考下面。。。谢谢。这不是单独的说明。指令有两个字节,0xc7,0x05;四个字节表示一个小尾端格式的地址,然后再表示另一个小尾端地址的四个字节。出于某种奇怪的原因,程序集列表每行最多只显示7个字节。