首页
社区
课程
招聘
[求助]菜鸟修改Delphi6写的程序,增加调用DLL后报错。
发表于: 2009-1-22 11:24 6767

[求助]菜鸟修改Delphi6写的程序,增加调用DLL后报错。

2009-1-22 11:24
6767
【求助】菜鸟修改Delphi6写的程序,增加调用DLL后报错。

先声明,我是一个菜鸟,对PE的DIY并不懂。只是前几天一个朋友丢个EXE给我,要我帮他加个功能。

来PEDIY论坛搜了两天,也自己试了两天,DLL调用终于是加上了。可能返回后报错,请高手们救救。

程序是一个抽奖程序,现在要在单抽一等奖时加一个内定号码的功能。
我的想法是抽奖结束后把那个EDIT传到DLL里,然后由DLL去做。

我写了一个简单的DLL,获取EDIT里的内容。现在EDIT已经传到DLL里了,可能从DLL返回后就报错。

tycjcx.exe是用LordPE增加DLL导入后的文件,代码并没修改
tycjcx1.exe是我修改后的程序。
ext1.dll是我写的DLL,有代码。

经过分析,我是47a18c(定时器停止后,正准备取EDIT上的值)处修改。代码跑转到48ba38处。
48ba38处是我写的补丁代码,调用DLL函数。Delphi调试的时候已经成功调用。返回后报错。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 201
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
忘了贴补丁代码:

0048BA38   60               PUSHAD
0048BA39   FFB3 10030000    PUSH DWORD PTR DS:[EBX+310]
0048BA3F   E8 D5D50000      CALL <&ext1.GetMyExNumber>
0048BA44   61               POPAD
0048BA45   90               NOP
0048BA46   8D55 EC          LEA EDX,DWORD PTR SS:[EBP-14]
0048BA49  -E9 46E7FEFF      JMP tycjcx.0047A194
2009-1-22 12:05
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3

0048BA38    60              pushad
0048BA39    FFB3 10030000   push    dword ptr [ebx+310]
0048BA3F    E8 D5D50000     call    <&ext1.GetMyExNumber>
0048BA44    61              popad
0048BA45    8D55 EC         lea     edx, dword ptr [ebp-14]
0048BA48    8B83 10030000   mov     eax, dword ptr [ebx+310]
0048BA4E  - E9 41E7FEFF     jmp     0047A194


改成
0048BA38    60              pushad
0048BA39    FFB3 10030000   push    dword ptr [ebx+310]
0048BA3F    FF15 19904900   call    dword ptr [<&ext1.GetMyExNumber>]
0048BA45    61              popad
0048BA46    8D55 EC         lea     edx, dword ptr [ebp-14]
0048BA49    8B83 10030000   mov     eax, dword ptr [ebx+310]
0048BA4F  - E9 41E7FEFF     jmp     0047A195

2009-1-22 14:27
0
雪    币: 201
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
改了问题依旧。
2009-1-22 17:22
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=kendling;568415]程序是一个抽奖程序,现在要在单抽一等奖时加一个内定号码的功能。[/QUOTE]

楼主不厚道啊,是想把一等奖内定给自己吧?
2009-1-22 19:07
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
6
0048BA38           60              PUSHAD
0048BA39           FFB3 10030000   PUSH    DWORD PTR DS:[EBX+310]
0048BA3F           [COLOR="Red"]FF15 19904900[/COLOR]   CALL    [COLOR="Red"]DWORD PTR DS:[<&ext1.GetMyExNumb>][/COLOR]; ext1.GetMyExNumber
0048BA45           61              POPAD
0048BA46           8D55 EC         LEA     EDX, DWORD PTR SS:[EBP-14]
0048BA49           8B83 10030000   MOV     EAX, DWORD PTR DS:[EBX+310]
0048BA4F         - E9 41E7FEFF     JMP     tycjcx1.0047A195


楼主的附件并没有按sessiondiy说的改啊?我改了以后就不再出错了。

需要修改的地方是图中红字那里,楼主call引入函数的方法错了。

注意:这个call函数指针的指令比near call指令多一个字节,所以后面的指令地址都变化了一个字节。
2009-1-22 20:42
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
7
不过好像你的dll中的函数功能有问题吧。我试了几次,并没有一个固定的号码被选定啊。

这是我修改好的程序。不知道是不是合乎要求。

tycjcx2.zip
上传的附件:
2009-1-22 20:48
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
8
yes
我是改了才发文的.
他说改了问题依旧
所以我只好无语
2009-1-22 22:36
0
雪    币: 201
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
春节回家过年了,一直没上,谢谢各位帮忙。
书呆彭兄的修改可以正常运行,不过我不知道为什么要CALL到一个地址再JMP。

功能没实现是因为DLL并没有写那功能。而且我发现参数的地址也找错了。
转进DLL的并非是EDIT的地址,而是左边选抽什么奖的Combobox地址。
2009-2-2 14:48
0
游客
登录 | 注册 方可回帖
返回
//