首页
社区
课程
招聘
[求助]请教如何手动做lib导入库
发表于: 2012-12-12 10:50 5810

[求助]请教如何手动做lib导入库

2012-12-12 10:50
5810
我想调用MessageBox,正常情况只要导入user32.lib就行了,现在我把原始user32.lib去掉,我自己用dumpbin和lib从user32.dll建立了一个user32.lib,但项目生成的时候提示无法解析的外部符号MessageBoxA@16,然后我查了一下user32.dll的MessageboxA没有带@16,而原始user32.lib是带@16,这是怎么回事?然后又在def加了一个MessageBoxA@16重新生成user32.lib,结果生成后的程序运行出错

现在我想问下该如何生成一个正确的user32.lib,只要求使用MessageBoxA函数就行了,哪位大侠能指导一下这个lib要包含哪些信息才能正确从user32.dll调用MessageBoxA函数,从lib文件本身的结构出发用16进制编辑器自己做出一个lib

动态调用不考虑

本人菜鸟,最近买了windows rt设备,想在上面运行传统程序

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
调用约定问题,声明messageboxA为stdcall函数类型
2012-12-12 16:16
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
二楼正解。。。。。快点研究 成功了在论坛上发下贴 我也去买个RT
正确的产生lib的方式应该读取头文件里面的api声明 生成cpp文件 导出函数
另: 可以直接用x86的lib不?
2012-12-12 21:26
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
搞不定,可能我太菜了
回复三楼,直接用 X86的lib会提示平台错误,我对比了 一下x86 x64 arm三者的lib,找不出平台特征码 ,你可以自己做个x86的lib试试,看能正确使用不
2012-12-12 23:36
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
终于搞定了

EXPORTS
MessageBoxA@16 @477

lib /def:f:\vc\lib\user32.def /OUT:f:\vc\lib\user32.lib
2012-12-13 11:53
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
#pragma pack(push,4)
typedef struct _IMAGE_FILE_HEADER {
        WORD Machine;
        WORD NumberOfSections;
        DWORD TimeDateStamp;
        DWORD PointerToSymbolTable;
        DWORD NumberOfSymbols;
        WORD SizeOfOptionalHeader;
        WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
#pragma pack(pop)

lib第一个字节就是平台代码
#define IMAGE_FILE_MACHINE_I386 0x14c
#define IMAGE_FILE_MACHINE_AMD64 0x8664
#define IMAGE_FILE_MACHINE_IA64 0x0200
2012-12-13 13:24
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
怎么创建工程编译?没发现怎么选择arm的处理器。。
2012-12-13 16:20
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不用工程,直接按下面的
EXPORTS
MessageBoxA@16 @477

lib /def:f:\vc\lib\user32.def /OUT:f:\vc\lib\user32.lib
上面这个是X86的

vs2012才有arm选项,另发现arm的版本只要写函数名就可以了,不要序号和参数大小

EXPORTS
MessageBoxW

lib /def:f:\vc\lib\user32.def /OUT:f:\vc\lib\user32.lib /MACHINE:ARM

windows rt的数字签名暂时无法破解,程序权限太小,暂时先不弄了,XDA的人正在尝试破解数字签名
2012-12-14 11:00
0
雪    币: 471
活跃值: (3988)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
苏菲RT能运行x86可执行文件?那MS的PRO版本不得喂狗
2012-12-14 11:54
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
老外搞定数字签名了,可以编译运行任意软件了
http://forum.xda-developers.com/showthread.php?t=1885399
http://surfsec.wordpress.com/2013/01/06/circumventing-windows-rts-code-integrity-mechanism/
2013-1-7 11:31
0
游客
登录 | 注册 方可回帖
返回
//