运行vc命令行,输入:dumpbin /disasm xxx.lib > test.txt

lib就是obj文件打包起来的,可以用lib.exe解出来,下面是vc环境下的操作,其他环境,看命令行帮助就可以了。

lib /list xx.lib 列出lib里所有obj文件名,我这里如下
。。。。。很多省略
lib/err/err.obj
lib/dict/dictll.obj
lib/coreDump/coreDumpWin32.obj
lib/config/preference.obj
lib/config/configUL.obj

找到你关注的obj,这里选择configUL.obj,然后 lib /EXTRACT:lib/config/configUL.obj xx.lib
解出configUL.obj, 然后把obj拖入IDA,我这里是ida5.5,在函数列表里找你要调用的函数,然后逆之

_Config_GetString       .text 00000068 00000039 R . . . B . .
_Config_GetBool         .text 000000B8 00000039 R . . . B . .
_Config_GetLong         .text 00000108 00000039 R . . . B . .
_Config_GetInt64        .text 00000158 0000003D R . . . B . .
_Config_GetTriState     .text 00000198 00000039 R . . . B . .
_Config_GetDouble       .text 000001E8 00000041 R . . . B T .
_Config_GetPathName     .text 00000288 00000039 R . . . B . .
_Config_NotSet          .text 000002C4 00000035 R . . . B . .
_Config_GetLongPlain    .text 000003B0 00000015 . . . . . . .
_Panic                  UNDEF 000003D0 00000004 R . . . . . .
_Preference_GetString   UNDEF 000003D4 00000004 R . . . . . .
_Str_Vsnprintf          UNDEF 000003D8 00000004 R . . . . . .
_Preference_GetBool     UNDEF 000003DC 00000004 R . . . . . .
_Preference_GetLong     UNDEF 000003E0 00000004 R . . . . . .
_Preference_GetInt64    UNDEF 000003E4 00000004 R . . . . . .
_Preference_GetTriState UNDEF 000003E8 00000004 R . . . . . .
_Preference_GetDouble   UNDEF 000003EC 00000004 R . . . . . .
_Preference_GetPathName UNDEF 000003F4 00000004 R . . . . . .
_Preference_NotSet      UNDEF 000003F8 00000004 R . . . . . .

我这里随便选择一个函数 _Config_GetString,很小的函数,呵呵,方便说明
.text:00000068 _Config_GetString proc near
.text:00000068
.text:00000068 var_400         = byte ptr -400h
.text:00000068 arg_0           = dword ptr  8
.text:00000068 arg_4           = dword ptr  0Ch
.text:00000068 arg_8           = byte ptr  10h
.text:00000068
.text:00000068                 push    ebp
.text:00000069                 mov     ebp, esp
.text:0000006B                 mov     ecx, [ebp+arg_4]
.text:0000006E                 sub     esp, 400h
.text:00000074                 lea     eax, [ebp+arg_8]
.text:00000077                 push    eax
.text:00000078                 push    ecx
.text:00000079                 lea     edx, [ebp+var_400]
.text:0000007F                 push    400h
.text:00000084                 push    edx
.text:00000085                 call    _Str_Vsnprintf
.text:0000008A                 mov     ecx, [ebp+arg_0]
.text:0000008D                 lea     eax, [ebp+var_400]
.text:00000093                 push    eax
.text:00000094                 push    ecx
.text:00000095                 call    _Preference_GetString
.text:0000009A                 add     esp, 18h
.text:0000009D                 mov     esp, ebp
.text:0000009F                 pop     ebp
.text:000000A0                 retn
.text:000000A0 _Config_GetString endp

这个函数很简单,一看就知道功能了,格式化一个buffer,构建一个字符串返回,
下面是是直接f5后修改的结果
int __cdecl Config_GetString(int a1, int a2, char *buf)
{
  char buffer[0x400];
  Str_Vsnprintf(buffer, sizeof(buffer), a2, buf);
  return Preference_GetString(a1, &v4);
}

这种手法,搞个10个,8个的函数还行,多了会死人的,最好看了关键思路自己写个来的更快

lib.exe可在vs的安装目录中找到。

lib文件反汇编的更多相关文章

  1. 缺少.lib文件导致的Link2019 解决方案汇总

    环境Vs2015,  Win10 添加lib的方法在末尾 下面的错误都是我在写Direct3D程序中遇到的, 记下来方便查找 4.ws2_32.lib 3.   version.lib _GetFil ...

  2. .lib文件 .h文件 .dll文件

    .lib代表的是静态数据连接库,在windows系统中起到链接程序和函数的作用,存放的是函数的是函数调用的信息,是obj文件的集合.相当于linux中的.a或.0. .so文件.lib文件是不对外公开 ...

  3. dll,lib文件的导入

    这里介绍了两种方式调用,不过我一般用的是第一种,比较方便. 1动态库函数的调用,可以采用静态链接的方式 ,主要步骤如下: 1) 包含DLL中导出的头文件. 2) 采用#pragma comment(l ...

  4. Idea 添加lib文件夹,并添加至项目Libary

    在WEB-INF文件夹下新建lib文件夹,在lib文件夹上右键选择Add as Libary...,然后填写library名称,选择作用级别,选择作用项目,OK 注意:lib文件夹下需要有jar包后才 ...

  5. Android Studio 导入外部lib文件

    Android Studio 导入外部lib文件   1.将jar包放入Module里的lib文件夹中.(自己创建lib文件夹) 2.在project选中jar包点击右键"Add as li ...

  6. Keil C51里面lib文件生成和调用方法

    一.包含关系 LCD1602.C里面包含LCD1602.H LCD1602.H的文件格式 二.设置生成lib文件 三.Lib文件调用 添加lib文件对话框 添加后的lib文件 呵呵^_^,这样就可以删 ...

  7. LIB文件和DLL文件的作用

    (1)lib是编译时需要的,dll是运行时需要的.如果要完成源代码的编译,有lib就够了.如果也使动态连接的程序运行起来,有dll就够了.在开发和调试阶段,当然最好都有.(2)一般的动态库程序有lib ...

  8. 关于vs的lib文件和dll文件

    一.LIB文件概念 一个lib文件是obj文件的集合.当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件 二.与DLL的区别 (1)lib是编译时需要的,dll是运行时 ...

  9. VS怎样创建和使用lib文件

    假设你当前正在使用vs写了一个project,那么你想如今就生成一个Lib文件,那么能够直接在"项目属性"上进行改动i 项目属性->配置属性->常规->配置类型中 ...

随机推荐

  1. float属性详解

    内容: 1.block与inline复习 2.float介绍 3.float作用 4.清除浮动 1.block与inline复习 1 block元素是独立的一块,独占一行 2 多个block元素会各自 ...

  2. tensorflow data's save and load

    note: if you'll load data,the data shape should be similar with saved data's shape.    -- 中式英语,天下无敌 ...

  3. php获取服务器信息类

      <?php/**+------------------------------------------------------------------------------* 获取服务器信 ...

  4. spring data jpa @query的用法

    @Query注解的用法(Spring Data JPA) 参考文章:http://www.tuicool.com/articles/jQJBNv . 一个使用@Query注解的简单例子 @Query( ...

  5. C# WEB.API 接收并解析保存base64格式的图片

    using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System. ...

  6. 制作keil5的pack

    [原创出品§转载请注明出处] 出处:http://www.cnblogs.com/libra13179/p/6273415.html 我在这里就交大家怎样制作自己的Pack,(这里是我制作好的http ...

  7. RocketMQ初探(五)之RocketMQ4.2.6集群部署(单Master+双Master+2m+2s+async异步复制)

    以下部署方式结合众多博友的博客,经过自己一步一步实际搭建,如有雷同,侵权行为,请见谅...其中遇到不少的坑,希望能帮到更多的人,现在很少能找到一份完整版4.2.6版本的搭建教程了,如果你有幸遇见,那么 ...

  8. JAVA NIO学习记录2-非阻塞式网络通信

    一.阻塞与非阻塞 传统的IO 流都是阻塞式的.也就是说,当一个线程调用read() 或write() 时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务.因此,在完成网络通信 ...

  9. 关于U3D场景烘焙的一个想法

    U3D进行场景烘焙时,发现阴影无法选择烘焙质量,其实想一下也合理,毕竟是烘焙,是将光照与阴影信息保存到lightmap中,因此阴影的质量取决于光照贴图的精度, 就算光照贴图再大,也远不可能达到实时光照 ...

  10. bash: ifconfig: command not found 问题解决

    ifconfig使用出现问题了?竟然提示找不到~~于是百度~~ [flymouse@localhost /]$ ifconfig 提示:“bash: ifconfig: command not fou ...