TextOutA函数与TextOutW函数

               

这仍然是在学习字符编码的时候引出来的。
原意是感觉字符编码既然这么普遍地存在,那么操作系统又是如何做的呢?所以想到要调试一下TextOutA函数,看看它输出文本的时候是怎样对付字符编码问题的。最后的结果是:
TextOutA实际上是封装了一个另外的函数调用。TextOutA的流程大概是这个样子:
BOOL TextOutA(
  HDC hdc,           // handle to DC
  int nXStart,       // x-coordinate of starting position
  int nYStart,       // y-coordinate of starting position
  LPCTSTR lpString,  // character string
  int cbString       // number of characters
) {
       if(cbString <= 0) {
              jmp 77F0FD46h
       }
       if(lpString == NULL) {
              jmp 77F0FD46h
       }
       PROC lpFunc = (PROC) 0x77EF8E4E;
       lpFunc(hdc, nXStart, nYStart, 0, 0, lpString, cbString, 0, 1);
}
在上述伪代码中的lpFunc中,又依次调用了GdiGetCodePage函数和MultiByteToWideChar函数,然后调用了一个地址(在我的电脑上是77EF664F)处的代码,接下来是其它的工作,而TextOutW则是直接调用了77EF664F地址处的代码。

以上就是调试好几个小时的结论。实际上,这些东西都可以通过静态分析看出来,那样的话更简单。这个结论到后来没有任何意义了。但为几个小时的调试,还是暂且记下来。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值