首页
社区
课程
招聘
[原创]RadAsm 3.x支持中文注释
发表于: 2016-5-25 20:16 11953

[原创]RadAsm 3.x支持中文注释

2016-5-25 20:16
11953

原版下载地址:
   
https://fbedit.svn.sourceforge.net/svnroot/fbedit/RadASM30/Release/RadASM.zip
        RadAsm是大家熟悉的一款汇编编译器,笔者最近下载了貌似是最新版的,在使用后发现不支持中文注释,如图1

        图1  中文注释乱码
        尽管网上有下载别人共享的中文版本,笔者还是想亲自探个究竟,看下到底是什么原因不支持中文注释,所以,在此记录下修改的过程。
        用OD载入RadAsm.exe,F9 先让程序运行起来,然后下断bp CreateFontA,点击工具栏的快捷按钮新建文档(图2)。断下来后,返回程序领空。

        图2   新建文档
        来到这里。
      

0046644E    E8 6FF70000     call <jmp.&gdi32.GetTextMetricsA>
00466453    0FB645 CF       movzx eax,byte ptr ss:[ebp-0x31]
00466457    8983 AC010000   mov dword ptr ds:[ebx+0x1AC],eax
0046645D    C783 B0010000 0>mov dword ptr ds:[ebx+0x1B0],0x0
00466467    3D 86000000     cmp eax,0x86
0046646C    74 15           je short RadASM.00466483
0046646E    3D 88000000     cmp eax,0x88
00466473    74 0E           je short RadASM.00466483
00466475    3D 80000000     cmp eax,0x80
0046647A    74 07           je short RadASM.00466483
0046647C    3D 81000000     cmp eax,0x81
00466481    75 06           jnz short RadASM.00466489
00466483    8983 B0010000   mov dword ptr ds:[ebx+0x1B0],eax
00466489    FFB3 A4010000   push dword ptr ds:[ebx+0x1A4]
0046648F    FF75 FC         push dword ptr ss:[ebp-0x4]
00466492    E8 DFEAFBFF     call <jmp.&gdi32.SelectObject>

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (7)
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
这个要支持你。不过现在这个好像用的人不多了。
2016-5-25 20:24
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
怀  念
2016-5-25 20:40
0
雪    币: 1432
活跃值: (3067)
能力值: ( LV9,RANK:156 )
在线值:
发帖
回帖
粉丝
4
支持。asm 写小程序还是可以得。
2016-5-25 21:07
0
雪    币: 807
活跃值: (2283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
0x86 不是中国区号,而是 CHARSET ID,除了 0x86,程序中还出现了其它的多个ID它们分别是:
CHARSET ID            CHARSET NAME           CODE PAGE
   0x00                ANSI_CHARSET           1252
   0x80             SHIFTJS_CHARSET            932
   0x81              HANGUL_CHARSET            949
   0x86              GB2312_CHARSET            936
   0x88         CHINESEBIG5_CHARSET            950


      在正常的简体中文系统环境下 CHARSET ID = 0x86,而 RADASM 通过 Windows API GetTextMetrics 函数获取到的 CHARSET ID = 0x00,从而导致中文字符出现了乱码。

       这个问题,只需要修改原始程序中的一条指令就可以了。

【修改前】:
00466453  |.  0FB645 CF                  movzx   eax, byte ptr [ebp-31]


【修改后】:
00466453      33C0                       xor     eax, eax
00466455      B0 86                      mov     al, 86


      这样,可以使修改只针对问题,最大限度避免伤及无辜,以免给程序埋下隐患。
2016-11-15 11:27
0
雪    币: 187
活跃值: (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
"而 RADASM 通过 Windows API GetTextMetrics 函数获取到的 CHARSET ID = 0x00" 原因是你的字体设置没设置好,如下设置即可:

框选出来的那个设置决定了  GetTextMetrics 的返回值。
最后于 2019-5-28 11:03 被hackoflife编辑 ,原因: 重新截图
2019-5-28 10:49
0
雪    币: 235
活跃值: (127)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
古老的工具
2019-7-14 21:42
0
雪    币: 497
活跃值: (63)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
8
现在用哪个IDE比较好??
2020-4-23 13:25
0
游客
登录 | 注册 方可回帖
返回
//