首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“see”反汇编Forth代码字

使用“see”反汇编Forth代码字
EN

Stack Overflow用户
提问于 2017-05-17 09:59:01
回答 4查看 1.1K关注 0票数 7

我正在准备关于构建Forth解释器的整体知识,并想要反汇编一些通用的Forth代码字,如+-*等。

我的Gforth (我目前在Ubuntu Linux上安装了0.7.3版本)将允许我反汇编我用命令see和单个代码字.创建的冒号定义。但当我尝试使用其他代码字,see +see /时,我得到一个错误,显示为Code +,然后我无法再在终端中键入,即使我按下c c。

我应该能够反编译/反汇编代码字,如Gforth手册所示:https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Decompilation-Tutorial.html

其他人也遇到过这个问题吗?你知道如何解决它吗?

EN

回答 4

Stack Overflow用户

发布于 2017-09-11 03:03:20

恢复到the old ptrace method为我做到了。

首先,以root用户身份从命令行运行:

代码语言:javascript
复制
echo 0 >/proc/sys/kernel/yama/ptrace_scope

在此之后,see应该反汇编任何它不能反编译的东西。命令行示例(不需要是root用户):

代码语言:javascript
复制
gforth -e "see +  bye"

输出:

代码语言:javascript
复制
Code +  
   0x000055a9bf6dad66 <gforth_engine+2454>: mov    %r14,0x21abf3(%rip)        # 0x55a9bf8f5960 <saved_ip>
   0x000055a9bf6dad6d <gforth_engine+2461>: lea    0x8(%r13),%rax
   0x000055a9bf6dad71 <gforth_engine+2465>: mov    0x0(%r13),%rdx
   0x000055a9bf6dad75 <gforth_engine+2469>: add    $0x8,%r14
   0x000055a9bf6dad79 <gforth_engine+2473>: add    %rdx,(%rax)
   0x000055a9bf6dad7c <gforth_engine+2476>: mov    %rax,%r13
   0x000055a9bf6dad7f <gforth_engine+2479>: mov    -0x8(%r14),%rcx
   0x000055a9bf6dad83 <gforth_engine+2483>: jmpq   *%rcx
end-code

来源: Anton Ertl

票数 7
EN

Stack Overflow用户

发布于 2019-01-28 11:02:31

我见过的大多数SEE版本都只用于反编译冒号定义。+和/和其他算术运算通常是用汇编代码编写的,SEE不知道如何处理它们。这就是为什么您会收到代码错误消息:它们是用代码编写的,而不是Forth。我见过有几个Forth实现内置了汇编程序,但我想我从来没有见过反汇编程序。要了解+或/或其他类似单词的内部工作原理,最好的方法可能是使用DUMP或其他此类单词来获取单词中的字节列表,并手动反汇编单词或将数据提供给外部反汇编程序。或者看看你是否能找到你的实现或类似的源代码。

票数 1
EN

Stack Overflow用户

发布于 2018-12-17 23:25:22

SEE是一个没有严格控制行为的词。这是一种最大的努力来显示一个单词X的代码,如果调用

请参见X

根据执行此操作的难度,它的行为略有不同。如果你在会话中自己定义了这个词,你就很有可能拿回你的代码。如果它是一个内置的单词,特别是如果它是一个像+这样非常基本的单词,它就会更难。由于优化或编译成机器代码,它可能看起来与原始定义一点也不像。

具体地说,对于gforth,如果遇到困难,gforth会调用系统上存在的标准工具来分析目标文件。因此,可能有必要安装gdb和/或调查gforth是如何连接到它的。对于Ubuntu和Gfort0.7.3的具体示例,Lutz Mueller给出了一个recipee。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44014281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档