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

汉化任务 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]5 D% U+ C6 V* o7 _

% W# i' ?, m, b- `  x先下个VC++试试看吧

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

gdi32  code

改好了,用第一种方式实现的.
( z; W' i& ^. P  F如果需要用到的系统头文件定义变量过多的话,可能不太适合,看你自己主要想实现什么功能吧
6 ~' O6 @* p) r# b/ D  P9 C) z
% K, E5 w1 g$ ]$ {7 u代码先贴出来,gdi32.h里的东西是我从生成的gdi32.c里拷贝 分离出来的,原本是想改进一下, ' w. ?% l6 i# S9 ~* a8 x
让gdi32.c里#include <windows.h>正常使用,gdi32.h里放重复定义的导出函数 3 A# i$ U' W1 q
这样尽量减少自己需要自定义的结构. 这一步还没分离完成,不过仅仅是想HOOK ExtTextOutA的话已经够用了
0 Z% t+ P! E' Z3 E  ^* d  w3 m/ T $ Z1 O0 h( l4 W
5 {7 P) m) d" G- F- o
相对原始生成.c文件,修改的部分有
' c& w6 Z) i/ z! n2 {  s, U1,    //_ExtTextOutA = (void *)GetProcAddress(hm, "ExtTextOutA"); ' s% R9 Z4 |: g- q
    _ExtTextOutA = (ExtTextOutA_)GetProcAddress(hm, "ExtTextOutA");
2 \. C7 P7 I6 `. ]+ w- y2,//PROXY_FUNCTION(ExtTextOutA)
  c* S% @$ X& [5 ~    由自己定义的钩子函数ExtTextOutA取代
" [' Y: ~$ c( s5 ^% \3,gcc宏移值
# M& q( L! z# d#define POP_EBP     __asm{pop ebp} 1 I7 b" \- ?8 v, A' ]
#define PROXY_FUNCTION(FUNCTION_NAME) \\ $ P; N8 H3 G) a
        PROXY_PROTOTYPE(*_##FUNCTION_NAME) = 0; \\ + h/ `9 c$ z  x( c8 ?: r
        PROXY_PROTOTYPE(FUNCTION_NAME) { \\
4 ^( R: t+ C9 s7 o  q' V. D  i        POP_EBP __asm {jmp _##FUNCTION_NAME} \\
% f: P2 `2 p. t! ?* N2 B  Q        }
% J7 c) {4 O# _* |* D
* {- H8 u6 k) w. _  Z5 X记得为VC链接命令行添加 /DEF:"gdi32.def"
. z8 g- Y% L. z4 P4 HPS:APIhijack好像只是打钩子,而不是伪造DLL

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2010-4-14 17:14 | 只看该作者
收到,多谢了。! z( R) t; Y8 t) m# I7 E
对了,是否能加上一个vc的工程文件?
- o5 C+ e, y' a- Z4 Z还有,_ExtTextOutA 建议改名为real_ExtTextOutA,更容易明白。
7 h$ P1 l* o' B& T0 q/ @我们修改过的ExtTextOutA等函数能否独立出来放在一个文件里,这样结构更清晰。
回复 支持 反对

使用道具 举报

16#
发表于 2010-4-14 17:53 | 只看该作者
这样命名是根据原作者的风格,我整理下在改吧,9 g/ N6 m. ~  r" r" g2 T+ [& u2 \! w
看能不能把重定义的部分分离得更彻底一些
回复 支持 反对

使用道具 举报

17#
发表于 2010-4-14 20:39 | 只看该作者
我不明白ExtTextOutA_是哪来的 [s:105]1 w1 J; _) f) t6 q& H! k8 O& v
p.s 原来那个叫钩子.我还是第一次接触这个概念,嘿嘿
回复 支持 反对

使用道具 举报

18#
发表于 2010-4-14 21:56 | 只看该作者
VC 和VC++有区别吗: t8 j6 _/ }, R, Z" t3 c1 k& f: H
我下了个VC++ 2008的,编译不了啊( L2 D. z0 c& `. t, \
    _CreateFontIndirectA = (void *)GetProcAddress(hm, "CreateFontIndirectA");* h3 S- H7 @# E/ @' M
等等都有这么个错
  ^' f2 q/ X9 |0 H& T5 X+ n3 ] Conversion from 'void*' to pointer to non-'void' requires an explicit cast
- ^& g5 Z) m. Z0 F7 f4 t: w9 {. y, J* y7 W9 j/ B- l  d! R$ b0 {
我先用钩子试试看看能不能编译
回复 支持 反对

使用道具 举报

19#
 楼主| 发表于 2010-4-14 22:49 | 只看该作者
试试看http://sourceforge.net/projects/dev-cpp/
( k2 z3 Q. ^6 G4 s% d: |, ~这个呢?是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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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