当前位置:网络安全 > vs2010如何显示函数列表_VS2010获取dll中的函数列表

vs2010如何显示函数列表_VS2010获取dll中的函数列表

  • 发布:2023-09-26 20:04

查看目录在这

但是你直接选取下拉,是没有显示的如下

这是因为你需要指定函数开头

比如说

此时再去下拉

嘿嘿嘿? 这是不是你想要的效果

?

step 1:将***.dll文件拷贝至如图中所示的路径下。

step 2:打开windons命令处理程序(win+R,input “cmd ”?),进入到vs2010的安装目录“Microsoft Visual Studio 10.0\VC”中,输入“dumpbin -exports ***.dll”即可获取函数列表,如下图:

VS2010命令行下查看虚函数表和类内存布局

——《深度探索C++对象模型》读书札记系列

?

在学习多重继承下的Virtual functions时,需要分析派生类的虚函数表(vtable),但是在网上找了好几种Hack vtable方法,结果都不尽如人意。没想到MS Compiler(以VS2010为例)有打印vtable的编译选项,真是太好了!

1. 打开“Visual Studio Command Prompt (2010)”,如下

该CMD下具有VS2010命令行下的一些编译、链接等工具,例如cl.exe。

?

2. 编写一个cpp文件

以《深度探索C++对象模型》的160页的代码(160.cpp)为例,如下

[cpp]

view plain

copy

print

?

class?Base1?{??public:??????Base1();??????virtual?~Base1();??????virtual?void?speackClearly();??????virtual?Base1*?clone()?const;??protected:??????float?data_Base1;??};????class?Base2?{??public:??????Base2();??????virtual?~Base2();??????virtual?void?mumble();??????virtual?Base2*?clone()?const;??protected:??????float?data_Base2;??};????class?Derived?:?public?Base1,?public?Base2?{??public:??????Derived();??????virtual?~Derived();??????virtual?Derived*?clone()?const;??protected:??????float?data_Derived;??};????int?main(void)??{??????return?0;??}??

class Base1 {

public:

Base1();

virtual ~Base1();

virtual void speackClearly();

virtual Base1* clone() const;

protected:

float data_Base1;

};

class Base2 {

public:

Base2();

virtual ~Base2();

virtual void mumble();

virtual Base2* clone() const;

protected:

float data_Base2;

};

class Derived : public Base1, public Base2 {

public:

Derived();

virtual ~Derived();

virtual Derived* clone() const;

protected:

float data_Derived;

};

int main(void)

{

return 0;

}

?

3、使用cl命令的/d1 reportAllClassLayout或reportSingleClassLayoutXXX选项。这里的reportAllClassLayout选项会打印大量相关类的信息,一般用处不大。而reportSingleClassLayoutXXX选项的XXX代表要编译的代码中类的名字(这里XXX类),打印XXX类的内存布局和虚函数表(如果代码中没有对应的类,则选项无效)。

举例如下

[plain]

view plain

copy

print

?

cl?/d1?reportSingleClassLayoutBase1?160.cpp??

cl /d1 reportSingleClassLayoutBase1 160.cpp

?

运行结果下

可以看出Base1的大小为8个字节,共有3个虚函数,分别是~Base1、speackClearly和clone,对于学习上述的示例代码绰绰有余咯~~

?

参考资料:

1、http://www.sychzs.cn/questions/3062647/how-to-get-every-virtual-function-index-just-as-the-compiler-does

2、http://www.sychzs.cn/lfhfut/article/details/4666142

3、http://www.sychzs.cn/b/vcblog/archive/2007/05/17/diagnosing-hidden-odr-violations-in-visual-c-and-fixing-lnk2022.aspx

?

?

?

相关文章