C++ 使用objdump或gcc-c将汇编指令转换为二进制

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进行编译?

我在缓冲炸弹实验室工作,有一件事我被卡住了。我已经编写了解决2级(鞭炮)的漏洞代码,但我不确定如何使用
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个字节。