首页
社区
课程
招聘
[原创]请教罗云彬win32汇编语言程序设计第17章的例子
发表于: 2008-7-4 15:42 5649

[原创]请教罗云彬win32汇编语言程序设计第17章的例子

2008-7-4 15:42
5649
;********************************************************************
; (Part 3)加入一个新的节,并修正一些PE头部的内容
;********************************************************************
                inc        [edi].FileHeader.NumberOfSections
                mov        eax,[edx].PointerToRawData
                add        eax,[edx].SizeOfRawData
                mov        [ebx].PointerToRawData,eax
                invoke        _Align,offset APPEND_CODE_END-offset APPEND_CODE,[esi].OptionalHeader.FileAlignment
                mov        [ebx].SizeOfRawData,eax
                invoke        _Align,offset APPEND_CODE_END-offset APPEND_CODE,[esi].OptionalHeader.SectionAlignment
                add        [edi].OptionalHeader.SizeOfCode,eax        ;修正SizeOfCode
                add        [edi].OptionalHeader.SizeOfImage,eax        ;修正SizeOfImage
                invoke        _Align,[edx].Misc.VirtualSize,[esi].OptionalHeader.SectionAlignment
                add        eax,[edx].VirtualAddress
                mov        [ebx].VirtualAddress,eax
                mov        [ebx].Misc.VirtualSize,offset APPEND_CODE_END-offset APPEND_CODE                mov        [ebx].Characteristics,IMAGE_SCN_CNT_CODE\
                        or IMAGE_SCN_MEM_EXECUTE or IMAGE_SCN_MEM_READ or IMAGE_SCN_MEM_WRITE
                invoke        lstrcpy,addr [ebx].Name1,addr szMySection

offset APPEND_CODE_END-offset APPEND_CODE 这个表达式在程序中出现了三处

用OD载入的时候
004013AC  |.  FF76 3C       push    dword ptr [esi+3C]
004013AF  |.  68 28030000   push    328
004013B4  |.  E8 F9FEFFFF   call    004012B2
004013B9  |.  8943 10       mov     dword ptr [ebx+10], eax
004013BC  |.  FF76 38       push    dword ptr [esi+38]
004013BF  |.  68 28030000   push    328
004013C4  |.  E8 E9FEFFFF   call    004012B2
004013C9  |.  0147 1C       add     dword ptr [edi+1C], eax
004013CC  |.  0147 50       add     dword ptr [edi+50], eax
004013CF  |.  FF76 38       push    dword ptr [esi+38]
004013D2  |.  FF72 08       push    dword ptr [edx+8]
004013D5  |.  E8 D8FEFFFF   call    004012B2
004013DA  |.  0342 0C       add     eax, dword ptr [edx+C]
004013DD  |.  8943 0C       mov     dword ptr [ebx+C], eax
004013E0  |.  C743 08 6A020>mov     dword ptr [ebx+8], 26A
004013E7  |.  C743 24 20000>mov     dword ptr [ebx+24], E0000020
004013EE  |.  68 19214000   push    00402119                         ; /String2 = ".adata"

为什么在od里前二处为328而第三处为26A,想不明白,请大家解惑!

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 124
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
放到invoke里的时候就会变,我一般都是mov eax,xx,push,或者mov到一个变量里,再用invoke调用
2008-7-4 16:19
0
雪    币: 150
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
怎么会这样,这个值不是在程序中得到的是在第二次编译时得到的。不知道APPEND_CODE_END 与 APPEND_CODE 标在何处。
2008-7-7 16:08
0
雪    币: 615
活跃值: (1377)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
尝试了一下,还是26A
感觉这是编译器优化后的值,也可以小些,但是不能小太多..
只是猜测.
2008-7-7 19:40
0
雪    币: 150
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
汇编没有优化,你如何写,编译出来就是这样,而且你这个值是在编译前已能确定的。
2008-7-8 09:00
0
游客
登录 | 注册 方可回帖
返回