首页
社区
课程
招聘
关于Borland C++ 1999编译器编译程序的问题~!
发表于: 2004-11-22 12:40 9552

关于Borland C++ 1999编译器编译程序的问题~!

2004-11-22 12:40
9552
先看看两个Borland C++ 1999编译的程序在第一个CALL之前的代码:

004014BC > /EB 10               jmp short dumped_.004014CE
004014BE   |66:623A             bound di,dword ptr ds:[edx]
004014C1   |43                  inc ebx
004014C2   |2B2B                sub ebp,dword ptr ds:[ebx]
004014C4   |48                  dec eax
004014C5   |4F                  dec edi
004014C6   |4F                  dec edi
004014C7   |4B                  dec ebx
004014C8   |90                  nop
004014C9  -|E9 98604C00         jmp 008C7566
004014CE   \A1 8B604C00         mov eax,dword ptr ds:[4C608B]
004014D3    C1E0 02             shl eax,2
004014D6    A3 8F604C00         mov dword ptr ds:[4C608F],eax
004014DB    52                  push edx
004014DC    6A 00               push 0

00401464 > /EB 10               jmp short dumped1_.00401476
00401466   |66:623A             bound di,dword ptr ds:[edx]
00401469   |43                  inc ebx
0040146A   |2B2B                sub ebp,dword ptr ds:[ebx]
0040146C   |48                  dec eax
0040146D   |4F                  dec edi
0040146E   |4F                  dec edi
0040146F   |4B                  dec ebx
00401470   |90                  nop
00401471  -|E9 98E04E00         jmp 008EF50E
00401476   \A1 8BE04E00         mov eax,dword ptr ds:[4EE08B]
0040147B    C1E0 02             shl eax,2
0040147E    A3 8FE04E00         mov dword ptr ds:[4EE08F],eax
00401483    52                  push edx
00401484    6A 00               push 0

两个程序唯一不同的地方就是这几句:
mov eax,dword ptr ds:[4C608B]
mov dword ptr ds:[4C608F],eax
mov eax,dword ptr ds:[4EE08B]
mov dword ptr ds:[4EE08F],eax

这几个地址如何而来,我尝试过更改这几个地址,换成别的地址,程序也能运行,那么Borland C++ 1999

编译器在编译的时候如何确定这几个地址呢?这几个地址又有何作用呢?又或是根本不起作用?请指点,
谢谢~!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
2
你可以去看看编译原理

这都是编译器自动生成的,没有什么很强的规律
2004-11-22 14:41
0
雪    币: 3758
活跃值: (3337)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
3
Borland C++ 1999
也就是Borland C++ Complier/Borland C++ Builder编译器.

程序能运行作为功能相同的判断,太草率了,举个小白例子,病毒感染后的带毒文件,也都能运行的.功能可是大不一样了
2004-11-22 14:45
0
雪    币: 229
活跃值: (143)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
最初由 曾半仙 发布
Borland C++ 1999
也就是Borland C++ Complier/Borland C++ Builder编译器.

程序能运行作为功能相同的判断,太草率了,举个小白例子,病毒感染后的带毒文件,也都能运行的.功能可是大不一样了


我就是想知道修改了这几个地址,会对程序有什么样的影响???又或是没有影

响?
2004-11-22 15:26
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼上不是说了吗?去看看编译原理!
2004-11-22 21:57
0
雪    币: 145
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
neo
6
这是上面代码的源代码,楼主去看看C0NT.ASM就知道了
;
; The entrypoint of all PE files will now contain a jump around the address
; of the debugger hook vector.  Eventually, the debugger will load it from
; here, but for now the debugger still looks for the exported name.
;
; We need to touch this symbol somewhere in the startup code so that it
; doesn't get smart-linked out, and the most logical place to put it was here
; where it will eventually need to be when we change the debugger to look
; for it here and not to use the exported name.
;
                jmp     skip_dbg_vector
                db      'fb:C++HOOK'           ; special signature
                nop                            ; alignment byte
                db      0E9h                   ; encode a jmp instruction
                                               ; so that the disassembler in
                                               ; the IDE can see past this
                                               ; address to the skip_dbg_vector
                dd      offset ___CPPdebugHook_segment
skip_dbg_vector:
                mov     eax, __TLS_index
                shl     eax, 2
                mov     __TLS_index4, eax
2004-11-22 22:37
0
雪    币: 229
活跃值: (143)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
谢谢~!
手边没有编译原理的书~!
2004-11-23 18:33
0
游客
登录 | 注册 方可回帖
返回
//