相关疑难解决方法(0)

如何从GCC /铿锵声组件输出中消除"噪音"?

我想检查boost::variant在我的代码中应用的程序集输出,以便查看哪些中间调用被优化掉了.

当我编译以下示例(使用GCC 5.3 g++ -O3 -std=c++14 -S)时,似乎编译器优化了所有内容并直接返回100:

(...)
main:
.LFB9320:
    .cfi_startproc
    movl    $100, %eax
    ret
    .cfi_endproc
(...)
Run Code Online (Sandbox Code Playgroud)
#include <boost/variant.hpp>

struct Foo
{
    int get() { return 100; }
};

struct Bar
{
    int get() { return 999; }
};

using Variant = boost::variant<Foo, Bar>;


int run(Variant v)
{
    return boost::apply_visitor([](auto& x){return x.get();}, v);
}
int main()
{
    Foo f;
    return run(f);
}
Run Code Online (Sandbox Code Playgroud)

但是,完整的程序集输出包含的内容远远超过上面的摘录,对我而言,它看起来永远不会被调用.有没有办法告诉GCC/clang删除所有"噪音"并输出程序运行时实际调用的内容?


完整装配输出:

    .file   "main1.cpp"
    .section    .rodata.str1.8,"aMS",@progbits,1
    .align 8
.LC0:
    .string "/opt/boost/include/boost/variant/detail/forced_return.hpp"
    .section    .rodata.str1.1,"aMS",@progbits,1
.LC1: …
Run Code Online (Sandbox Code Playgroud)

c++ assembly gcc clang

56
推荐指数
3
解决办法
1万
查看次数

反编译汇编代码有多难(真的)?

我正在努力寻找有助于我的管理层理解对编译的C代码进行逆向工程的难易程度的事实.

之前在这个网站上已经提出了类似的问题(参见例如,是否可以"反编译"Windows .exe?或者至少查看程序集?或者可能反编译用C编写的DLL?),但这些问题的要点是反编译编译的C代码"很难,但并非完全不可能".

为了促进基于事实的答案,我包含了一个神秘函数的编译代码,我建议这个问题的答案通过它们是否可以确定这个函数的作用来衡量所提出技术的成败.这可能是不寻常的,但我认为这是获得这个工程问题的"良好主观"或事实答案的最佳方式.因此,你最好猜测这个功能在做什么,以及如何做?

这是使用gcc在Mac OSX上编译的已编译代码:

_mystery:
Leh_func_begin1:
    pushq   %rbp
Ltmp0:
    movq    %rsp, %rbp
Ltmp1:
    movsd   LCPI1_0(%rip), %xmm1
    subsd   %xmm0, %xmm1
    pxor    %xmm2, %xmm2
    ucomisd %xmm1, %xmm2
    jbe     LBB1_2
    xorpd   LCPI1_1(%rip), %xmm1
LBB1_2:
    ucomisd LCPI1_2(%rip), %xmm1
    jb      LBB1_8
    movsd   LCPI1_0(%rip), %xmm1
    movsd   LCPI1_3(%rip), %xmm2
    pxor    %xmm3, %xmm3
    movsd   LCPI1_1(%rip), %xmm4
    jmp     LBB1_4
    .align  4, 0x90
LBB1_5:
    ucomisd LCPI1_2(%rip), %xmm1
    jb      LBB1_9
    movapd  %xmm5, %xmm1
LBB1_4:
    movapd  %xmm0, %xmm5
    divsd   %xmm1, %xmm5
    addsd   %xmm1, %xmm5
    mulsd …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly decompiling reverse-engineering

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

是否可以反编译.dll/.pyd文件以提取Python源代码?

有没有办法反编译一个DLL和/或.pyd文件,以提取用Python编写的源代码?

提前致谢

python dll decompiling pyd extraction

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

如何将exe或dll反编译为汇编

我对汇编语言非常感兴趣,我想了解exe文件如何运行dll如何运行等等...我有一个编写应用程序来反编译exe汇编代码的想法,因为我不是一个非常好的汇编程序员和由于缺乏对exe内部工作的了解,我无法做到.因为我可以读取十六进制的exe,我认为这不是不可能,但我不知道如何编写我自己的程序.任何资源或任何帮助将不胜感激.

dll assembly decompiling exe

10
推荐指数
4
解决办法
7万
查看次数

是否可以反编译 C++ 可执行文件

我丢失了可执行文件的源代码,但仍有实际文件。有没有办法检索原始的C++代码?

c++ executable decompiling

10
推荐指数
1
解决办法
6万
查看次数

可以将所有程序转换为汇编吗?

假设我们有一个exe,可以很容易地转换为汇编吗?软件作者有没有办法阻止/阻止这种情况?

assembly disassembly

3
推荐指数
2
解决办法
1036
查看次数

可以反编译用C编写的DLL吗?

我想反编译一个我认为用C编写的DLL.我该怎么做?

c decompiling

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