Assembly 从objdump重新组装程序集代码

Assembly 从objdump重新组装程序集代码,assembly,binary,x86,intel,Assembly,Binary,X86,Intel,我有一个二进制文件,我首先用objdump反汇编,如下所示: objdump -Mintel -d mybinary 结果是这样的(我只放了一部分,目的是让你看到它的样子): patchme:format de fichier elf64-x86-64 Déla段组装。初始: 0000000000 4003E0: 4003e0:48 83 ec 08子rsp,0x8 4003e4:48 8b 05 0d 0c 20 00 mov rax,QWORD PTR[rip+0x200c0d]#600f

我有一个二进制文件,我首先用objdump反汇编,如下所示:

objdump -Mintel -d mybinary
结果是这样的(我只放了一部分,目的是让你看到它的样子):

patchme:format de fichier elf64-x86-64
Déla段组装。初始:
0000000000 4003E0:
4003e0:48 83 ec 08子rsp,0x8
4003e4:48 8b 05 0d 0c 20 00 mov rax,QWORD PTR[rip+0x200c0d]#600ff8
4003eb:48 85 c0测试rax,rax
4003ee:74 05 je 4003f5
4003f0:e8 3b 00 00呼叫400430
4003f5:48 83 c4 08添加rsp,0x8
4003f9:c3 ret
我修改了汇编代码(以及相关的十六进制值)。我想知道是否有一种简单的方法可以将这些代码重新组装成二进制代码?就像一个命令一样

谢谢大家!


PS:我知道我可以将每个十六进制转换成二进制,并将它们连接起来。。。但是这需要做大量的工作:-p

您可以使用十六进制编辑器或修补程序工具将更改应用于原始二进制文件(您可以将
--file offset
参数传递给objdump,让它告诉您正在修改的偏移量的实际文件位置)

当然,您总是可以去掉地址和十六进制,然后使用您选择的汇编器重新组装代码,但是您仍然有一个问题,即如何将其修补到原始二进制文件中(可能包含的不仅仅是您上面显示的部分)

patchme:     format de fichier elf64-x86-64

Déassemblage de la section .init :

00000000004003e0 <_init>:
  4003e0:   48 83 ec 08             sub    rsp,0x8
  4003e4:   48 8b 05 0d 0c 20 00    mov    rax,QWORD PTR [rip+0x200c0d]        # 600ff8 <_DYNAMIC+0x1d0>
  4003eb:   48 85 c0                test   rax,rax
  4003ee:   74 05                   je     4003f5 <_init+0x15>
  4003f0:   e8 3b 00 00 00          call   400430 <__gmon_start__@plt>
  4003f5:   48 83 c4 08             add    rsp,0x8
  4003f9:   c3                      ret