设为首页收藏本站官方微博

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

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

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

11#
 楼主| 发表于 2010-4-13 20:39 | 只看该作者
收到,那我等你实现的版本。
回复 支持 反对

使用道具 举报

12#
发表于 2010-4-14 07:56 | 只看该作者
我也碰到这个问题了,MingW的编译不了 [s:102]
回复 支持 反对

使用道具 举报

13#
发表于 2010-4-14 12:39 | 只看该作者
发现有个叫APIHijack的库很受人推崇,终于把代码问题解决了,没有前面所说的问题,不过再编译他的cpp里的汇编出问题了...我觉得可能是我用code::blocks+mingW的关系,他给的例子我都编译不了 [s:102]
' z2 \4 T1 [5 T  |2 L( u3 r# F
, o  t! E" i% X6 ^! J! ~先下个VC++试试看吧

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

14#
发表于 2010-4-14 15:34 | 只看该作者

gdi32  code

改好了,用第一种方式实现的. 6 g- V8 u) x5 `5 W$ E9 l7 p  Y
如果需要用到的系统头文件定义变量过多的话,可能不太适合,看你自己主要想实现什么功能吧
* ?* `) ~9 p7 x; o
. S: c7 Q1 s7 S+ \  l) p3 O8 o  ]代码先贴出来,gdi32.h里的东西是我从生成的gdi32.c里拷贝 分离出来的,原本是想改进一下,
/ \, J( ?1 C9 }  X5 V' e2 u% Q让gdi32.c里#include <windows.h>正常使用,gdi32.h里放重复定义的导出函数
, M5 T$ X' n, t4 W这样尽量减少自己需要自定义的结构. 这一步还没分离完成,不过仅仅是想HOOK ExtTextOutA的话已经够用了
# W% Y, i# @- z! @* _ 9 f5 m- m! [, k1 |" i
# S- G+ P/ K- X9 W
相对原始生成.c文件,修改的部分有
3 ^5 |% _& Y3 i  l$ ~1,    //_ExtTextOutA = (void *)GetProcAddress(hm, "ExtTextOutA"); * m' W& O! Z9 C: e% `* \! D4 k$ U0 r
    _ExtTextOutA = (ExtTextOutA_)GetProcAddress(hm, "ExtTextOutA"); # @3 s% j8 J/ U1 c, T7 H+ c
2,//PROXY_FUNCTION(ExtTextOutA)
/ D7 M, U8 `8 S1 L; `- ^2 x/ c    由自己定义的钩子函数ExtTextOutA取代 $ W/ x. P) v; Q$ s" S) p2 G
3,gcc宏移值 1 _: S- U6 y1 N* v, e2 v+ ^
#define POP_EBP     __asm{pop ebp} - g9 s: b8 p8 C9 ?0 U# e1 h& }
#define PROXY_FUNCTION(FUNCTION_NAME) \\
4 {6 U( {+ ~+ R- Y& o        PROXY_PROTOTYPE(*_##FUNCTION_NAME) = 0; \\
  v% j" S+ f5 ~. j        PROXY_PROTOTYPE(FUNCTION_NAME) { \\
. R) b* _, v6 G8 L        POP_EBP __asm {jmp _##FUNCTION_NAME} \\ 3 V, ]  {# y' e# I
        }
8 L7 u! I/ u' z: I; p# v3 u# T( @! `; n; f
记得为VC链接命令行添加 /DEF:"gdi32.def" , D* {. {  @: @" q" R- z4 Z7 r/ _
PS:APIhijack好像只是打钩子,而不是伪造DLL

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2010-4-14 17:14 | 只看该作者
收到,多谢了。- V( e6 U. s4 m8 p) T! D0 I5 o
对了,是否能加上一个vc的工程文件?
, k. H/ L0 T" T$ u8 j2 ^还有,_ExtTextOutA 建议改名为real_ExtTextOutA,更容易明白。# n7 Q+ c' a$ T/ i0 d  s
我们修改过的ExtTextOutA等函数能否独立出来放在一个文件里,这样结构更清晰。
回复 支持 反对

使用道具 举报

16#
发表于 2010-4-14 17:53 | 只看该作者
这样命名是根据原作者的风格,我整理下在改吧,1 G5 D. e0 v0 r& Q; T( }
看能不能把重定义的部分分离得更彻底一些
回复 支持 反对

使用道具 举报

17#
发表于 2010-4-14 20:39 | 只看该作者
我不明白ExtTextOutA_是哪来的 [s:105]- Y# K& }$ U. v# t+ Q/ C% Q( w
p.s 原来那个叫钩子.我还是第一次接触这个概念,嘿嘿
回复 支持 反对

使用道具 举报

18#
发表于 2010-4-14 21:56 | 只看该作者
VC 和VC++有区别吗" H0 V' j) W9 {( y# ^( X
我下了个VC++ 2008的,编译不了啊2 \4 R# S. G2 y. O
    _CreateFontIndirectA = (void *)GetProcAddress(hm, "CreateFontIndirectA");
3 v9 A2 Q  H/ p8 a8 G0 u# c等等都有这么个错
7 X% }/ Y' g) L Conversion from 'void*' to pointer to non-'void' requires an explicit cast
# |) k! E9 r4 ^2 ^: X* X$ S; y  G* X% \8 C
我先用钩子试试看看能不能编译
回复 支持 反对

使用道具 举报

19#
 楼主| 发表于 2010-4-14 22:49 | 只看该作者
试试看http://sourceforge.net/projects/dev-cpp/
" r) r5 t% R% m; Q1 j+ Z这个呢?是gcc的。
回复 支持 反对

使用道具 举报

20#
发表于 2010-4-14 23:52 | 只看该作者
原来是VC++是cpp不是c的原因  [s:116]
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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