设为首页收藏本站官方微博
123
返回列表 发新帖

汉化任务 GDI32.DLL的代理DLL(solidji 请进)

[复制链接]
楼主: shane007
打印 上一主题 下一主题

[汉化任务] GDI32.DLL的代理DLL(solidji 请进)

21#
发表于 2010-4-19 05:46 | 只看该作者
我再来求救一下,编译好的gd32.dll好像没起作用嘛,我加了个while(1);0 c; G3 J/ v' |0 w0 u) d
运行了个测试程序还是没成功啊2 J: r6 u6 \; g4 D# Z9 N

; X9 U' K( J+ K/ K  ?; I1 I我还是看得不是很懂,比如说2 n: K8 W# o5 S& ?# e
这个BOOL,有一个#define,还有一个typedef
. s0 W9 L7 J* p7 t+ R那在我们改的函数那里就是
( H) n6 m2 l: O: @0 _% |6 ~9 g$ @BOOL ExtTextOutA(blah blah)
1 ]* O( S/ g$ F4 R% B那是不是说我们的定义就是
  1. (WINAPI *ExtTextOutA_)(
  2.                 HDC         hdc,
  3.                 int         x,
  4.                 int         y,
  5.                 unsigned int         flags,
  6.                 const RECT* lprect,
  7.                 LPCSTR      str,
  8.                 unsigned int        count,
  9.                 const int*  lpDx
  10. );
复制代码
还有就是不明白
5 ?: ?* w2 u6 H0 RExtTextOutA_ _ExtTextOutA = 0;
& @. C! Q* a/ ]! Y6 q& a$ g这个ExtTextOutA_和_ExtTexOutA又是怎么定义的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

22#
发表于 2010-4-20 11:34 | 只看该作者
typedef BOOL (WINAPI *ExtTextOutA_)2 |/ w. P8 v+ ?3 i& `
就是定义了一个函数类型,我们故意把他定义成和原始的API ExtTextOutA一样  _6 G( Q  f/ b$ N
就是为了ExtTextOutA_ _ExtTextOutA 声明一个与原始API ExtTextOutA一样一样的函数指针
" N. R8 J. W$ d4 v/ f# o然后_ExtTextOutA = (ExtTextOutA_)GetProcAddress(hm, "ExtTextOutA"); 为这个函数指针赋值为原始API的函数地址
. }4 a/ R# }* z& O! v4 \( H* @这样_ExtTextOutA  就是real_ExtTextOutA的意思,完全把他当原始API ExtTextOutA 来使用就是了8 m; T. I; J/ O" H

% {/ t7 |$ H: G$ T你编译的DLL有点问题,我打开PE文件找到  ExtTextOutA  部分,发现虽然你导出了ExtTextOutA ,但却不是你实现的那个
; V# U) m% \* q& a- A1 X6 a# z- m/ q( t8 a* @. E- X% \# P

0 x" _5 y5 I) O( N4 W! ^+ f4 h- A/ W* B6 t( ~

. A% N( y: G2 n5 D& P, ?
  1. //6A80偏移处你 实际上的函数体代码,可以看到只是个简单的代理,明显不是你自己实现的那个
  2. 10006A80 >  8B4424 20           mov eax,dword ptr ss:[esp+20]
  3. 10006A84    8B4C24 1C           mov ecx,dword ptr ss:[esp+1C]
  4. 10006A88    8B5424 18           mov edx,dword ptr ss:[esp+18]
  5. 10006A8C    50                  push eax
  6. 10006A8D    8B4424 18           mov eax,dword ptr ss:[esp+18]
  7. 10006A91    51                  push ecx
  8. 10006A92    8B4C24 18           mov ecx,dword ptr ss:[esp+18]
  9. 10006A96    52                  push edx
  10. 10006A97    8B5424 18           mov edx,dword ptr ss:[esp+18]
  11. 10006A9B    50                  push eax
  12. 10006A9C    8B4424 18           mov eax,dword ptr ss:[esp+18]
  13. 10006AA0    51                  push ecx
  14. 10006AA1    8B4C24 18           mov ecx,dword ptr ss:[esp+18]
  15. 10006AA5    52                  push edx
  16. 10006AA6    50                  push eax
  17. 10006AA7    51                  push ecx
  18. 10006AA8    FF15 80520110       call dword ptr ds:[10015280]                            ; GDI32.ExtTextOutA
  19. 10006AAE    A3 24570110         mov dword ptr ds:[10015724],eax
  20. 10006AB3    C3                  retn
复制代码
2 l8 k* X2 ~+ R& m) r  M

# \% W3 Z* g; A! Q1 }1 F我想主要是你定义ExtTextOutA 的时候漏了个int, VC认为这是你另外一个内部函数,而导出的是另外一个
  1. int ExtTextOutA(
  2. HDC         hdc,
  3. int         x,
  4. int         y,
  5. unsigned int         flags,
  6. const RECT* lprect,
  7. LPCSTR      str,
  8. unsigned int        count,
  9. const int*  lpDx)
  10. {
  11.   
  12. // MessageBox(0, "i'm in ExtTextOutA now!", 0, 0);//做你想做的事情
复制代码
/ C9 W8 m% t6 k/ ?4 M" t) k4 C
另外附上我重新帮你编译过的DEBUG版DLL9 @9 j- t" q8 R% m; q6 k

9 t) K  H) H7 u; e% u9 F' c) D* x

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

23#
 楼主| 发表于 2010-4-20 11:53 | 只看该作者
solidji,请放代码,把scgame错误的地方注释说明一下,便于大家学习。
回复 支持 反对

使用道具 举报

24#
发表于 2010-4-20 12:19 | 只看该作者
他的代码就漏了个函数返回类型BOOL或int,
; x, \- }, k5 n7 K7 l- l
int
ExtTextOutA(8 D; G( r; Q1 j$ W& m
导致了导出函数链接没对
8 k9 {9 U  Z- g! ~0 j直接看他的代码就行了
回复 支持 反对

使用道具 举报

25#
发表于 2010-4-20 21:31 | 只看该作者
啊,原来是这样,+ O- Y- M" p0 M" z% B: z: W* T
谢谢,solidji" i& ?3 j# q3 n$ c+ z: z0 S: C
solidji能不能再推荐些教程3 r" E) [0 o" X+ ?: c4 L. O: n& `5 [
我对这方面(导出,API)之类的不太了解
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表