pe文件修改——工具版

 参考网址:http://www.anqn.com/jiamijiemi/gongjujiqiao/2008-11-04/a09103385-3.shtml

添加新节。

一个PE SECTION HEADER 大小为40个字节(28h. 找到最后一个section header的偏移地址为36f,   找到第一个section 的起始物理地址RoffSet=400h.  400-36f>28h, 所以能够添加新节。

 

IMAGE_FILE_HEADER结构的NumberOfSections数值+1

370处开始写新节的内容。用peload写。

New section.->vsize=100. Rsize=200filealign

Sectin alignment=1000->IMAGE_OPTIONAL_HEADERSizeOfImage0011D000h->0011E000h

File alignment=200->文件末尾处添加200h个空白数

 

 

物理地址为107c00h处添加16进制代码:

mov eax,ImageBase+oldoep;原始的入口地址送eax ;oldoep=0001F1B0;imageBase=00400000
jmp eax

 

NASM编译(我一开始把它编译成二进制,所以运行的时候一直显示代码出错,一直找不到原因)

      nasm -f bin myfile.asm -o myfile.com

  会把文件'myfile.asm'汇编成纯二进制格式的文件'myfile.com'

  想要以十六进制代码的形式产生列表文件输出,并让代码显示在源代码的左侧,

  使用'-l'选项并给出列表文件名,比如:

nasm -f coff myfile.asm -l myfile.lst

 

 

NASM 编译 push dword 33 ,文件名叫a.asm

[3:56:37] 张俊梁: nasm -f bin a.asm -o a.com

[3:57:14] 张俊梁: 内容是:66 68 21 00 00 00

[3:57:26] 张俊梁: nasm -f coff a.asm -l a.lst

[3:57:36] 张俊梁: 内容是: 68 21 00 00 00

[3:58:29] 张俊梁: 从结果上看应该是第一个对的,因为它应该是双字6个字节,但是我替换到PE文件里执行的话 第二个才能执行,第一个说代码错误。 why,

?????(待解决)

 

 Using the bin format puts NASM by default into 16-bit mode (see section 6.1). In order to use bin to write 32-bit or 64-bit code, such as an OS kernel, you need to explicitly issue the BITS 32 or BITS 64 directive.
16位模式的bin格式(见第5.1节)为了在系统中用一个32位代码,你需要指定一个BIT32定向
符。


The aout, coff, elf, macho, win32 and win64 object formats, which are designed for use in 32-bit or 64-bit operating systems, all cause NASM to select 32-bit or 64-bit mode, respectively, by default.
'aout','coff','elf'和
  'win32'目标文件格式都是被设计用在32位操作系统上的,它们会让NASM缺
  省选择32位模式

 

 

 

把入口地址改成107c00h对应的VITUAL ADDRESS

 

 

 

你可能感兴趣的:(汇编,object,header,File,工具,alignment)