小编Wil*_*yot的帖子

如何反汇编.lib静态库?

我已经用c编写了这个简单的库:

library.h:

int sum(int a, int b);
Run Code Online (Sandbox Code Playgroud)

library.c:

#include "library.h"
int sum(int a, int b) {
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令使用cl.exe(Visual Studio 2012)对其进行了编译:

cl /c /EHsc library.cpp
lib library.obj
Run Code Online (Sandbox Code Playgroud)

它将其编译为静态链接.lib库文件。现在,我想看看出于学习/学术目的,编译器如何生成汇编代码。请注意,我不想反编译它,我只想阅读生成的程序集。我试图用w32dasm打开.lib,但是出现很多奇怪的符号,看来该工具无法读取该文件。我已经使用了动态链接库(从相同的源生成)完成了类似的任务,并且有效。因为我能够使用w32dasm查看汇编代码。因此,我的问题是:是否可以像使用动态链接库那样查看静态链接库的汇编代码?如果是这样,那将是正确的工具,因为w32dasm似乎不是正确的工具。

c static-libraries disassembly

5
推荐指数
2
解决办法
1万
查看次数

了解隐式声明的默认结构函数

我试图理解编译器的默认构造函数是如何工作的.我做了这个例子:

#include <iostream>

class Base {
    public:
    int number;
};

class Test1 : public Base {  
};

class Test2 {
    public:
    Base base;
};

int main() {
    Test1 test1;
    Test2 test2;
    std::cout<<test1.number<<std::endl;
    std::cout<<test2.base.number<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

该测试程序的输出是for test1 0,for和for test2是未初始化的(随机)数字.现在我的问题是:为什么在第一种情况下(test1)编译器的默认构造函数初始化number为0但是test2它没有?

编辑:根据答案,两者都做出未定义的行为.那么,在这个程序中,编译器的默认构造函数是做什么的?

c++ default-constructor

4
推荐指数
1
解决办法
219
查看次数

实现c ++访问者模式,避免循环依赖

我在这里用C++实现了一个访问者模式.我有这个文件结构:

Base.h
---------------
#ifndef BASE_H
#define BASE_H

#include "visitor.h"

class Base{
public: virtual void accept(const visitor& v)=0;
};

#endif

Derived.h
-----------------
#ifndef DERIVED_H
#define DERIVED_H

#include "base.h"
#include "visitor.h"

class Derived : Base {
public: virtual void accept(const visitor& v);
};

#endif

visitor.h
------------------
#ifndef VISITOR_H
#define VISITOR_H

#include "base.h"
#include "derived.h"

class visitor {
    void visit(const base& base);
    void visit(const derived& derived);
};

#endif
Run Code Online (Sandbox Code Playgroud)

cpp文件只包含.h并定义上面链接中描述的acccept方法.我对这些文件结构的问题是标头之间的循环依赖.如果我用VS 2012编译它我得到这个错误:错误C2504:基类没有定义.谢谢你的建议,抱歉我的英语不好.

编辑:我已经更改了我的代码,如下所示:

Base.h
---------------
#ifndef BASE_H
#define BASE_H

//#include "visitor.h"
class …
Run Code Online (Sandbox Code Playgroud)

c++ circular-dependency

1
推荐指数
1
解决办法
1586
查看次数