|
|
1
16
长答案: 如果你查看二进制文件,你可以找到已链接的库的名称。在TextPad中打开cmd.exe很容易在十六进制偏移量0x270处找到以下内容:msvcrt.dll、KERNEL32.dll、NTDLL。DLL、USER32.DLL等。msvcrt是Microsoft“C”运行时支持函数。KERNEL32、NTDLL和USER32.dll是特定于操作系统的库,它们根据跨平台开发环境对两者的隔离程度,告诉您目标平台或构建平台。 撇开这些线索不谈,大多数c/c++编译器都必须将函数的名称插入二进制文件中,表中存储了所有函数(或入口点)的列表。C++“篡改”函数名以对参数及其类型进行编码,从而支持重载方法。可以混淆函数名称,但它们仍然存在。函数签名将包括可用于跟踪系统或程序中使用的内部调用的参数的数量和类型。在偏移量0x4190处是“SetThreadUILanguage”,可以搜索它以了解有关 development environment 。我在偏移0x1ED8A处找到了入口点表。我可以很容易地看到printf、exit和scanf等名称;以及__p_mode、__p_comode和__initenv x86处理器的任何可执行文件都将有一个数据段,其中包含程序中包含的任何静态文本。回到cmd.exe(偏移量0x42C8)的是文本“S.o.f.t.w.a.r.e.P.o.l.i.c.即S.M.i.c.r.o.S.o.f.t.w.i.n.d.o.w.S.y.S.t.e.M.”。字符串所需的字符数是通常所需的两倍,因为它是使用双宽字符存储的,可能是为了国际化。错误代码或消息是这里的主要来源。
,可以从二进制文件中确定源语言。 |
|
|
2
10
我不是编译器黑客(我希望有一天),但我认为你可以在二进制文件中找到信号,表明是什么编译器生成了它,以及使用了一些编译器选项,比如指定的优化级别。 然而,严格来说,你所要求的是不可能的。可能是有人拿着笔和纸坐下来,计算出与他们想写的程序相对应的二进制代码,然后在十六进制编辑器中键入这些内容。基本上,他们将在没有汇编工具的情况下进行汇编编程。同样,您可能永远无法确定一个本机二进制文件是用直接汇编程序编写的,还是用带有内联汇编程序的C编写的。
|
|
|
3
2
|
|
4
1
您已排除所有字节码语言,因此此问题将不会像预期的那样常见。 |
|
|
5
1
此外,通常还有一个指向各种库功能的“地图”。这也是一个很大的暗示。 当库链接到可执行文件中时,二进制文件中通常会包含一个带有名称和偏移量的映射。这是创建“独立于位置的代码”的一部分。你不能简单地将各种目标文件“硬链接”在一起。您需要一个映射,并且在将二进制文件加载到内存中时必须进行一些查找。
|
|
|
6
0
不,字节码与语言无关。不同的编译器甚至可以采用相同的代码源并生成不同的二进制文件。这就是为什么你看不到可以处理二进制文件的通用反编译器。 |
|
|
7
0
命令“string”可用于获取有关使用了哪种语言的提示(例如,我只是在我编写的C应用程序的剥离二进制文件上运行它,它找到的第一个条目是可执行文件链接的库)。 |
|
|
8
0
|
|
|
Sudhanva c · 如何提高编码技能?[已关闭] 8 年前 |
|
|
hoffm · 为什么Ruby找不到调用方类中定义的常量? 8 年前 |
|
|
Thamme Gowda · “lambda”关键字的较短替代项? 8 年前 |
|
|
AlphaModder · 有没有带有“不寻常”访问修饰符的编程语言? 11 年前 |
|
|
lucasasecas · 有可能静态地使用动态语言吗? 11 年前 |
|
|
Eugenio Laghi · 仅由括号、加号和感叹号组成的语言 11 年前 |
|
dallin · 数组中的逗号运算符是否有名称? 12 年前 |