2017-05-17 11 views
5

tôi đang chuẩn bị kiến ​​thức tổng thể về xây dựng một Forth thông dịch viên và muốn tháo rời một số từ mã chung Forth như +, -, * vvDissassembly của Forth từ mã với 'see'

My Gforth (Tôi hiện đang có phiên bản 0.7.3, được cài đặt trên Ubuntu Linux) sẽ cho phép tôi tháo rời các định nghĩa đại số mà tôi thực hiện bằng lệnh see, cũng như từ mã đơn .. Nhưng khi tôi thử nó với các từ mã khác, see + hoặc see /, tôi nhận được một lỗi nói rằng, Code +, và sau đó tôi không thể gõ vào thiết bị đầu cuối của tôi nữa, ngay cả khi tôi bấm control-c.

tôi sẽ có thể dịch ngược/tháo rời các từ mã, như thể hiện bởi hướng dẫn Gforth: https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Decompilation-Tutorial.html

Có ai khác có vấn đề này, và bạn có biết làm thế nào để sửa chữa nó?

+0

Tôi nghĩ rằng đó là in các giá trị nhị phân thực tế của từ - và nhị phân dữ liệu sẽ làm hỏng thiết bị đầu cuối của bạn. –

+1

Tôi đã kiểm tra trên Windows. 'see +' hiển thị dòng 'Code +', theo sau là một sự tháo gỡ từ đó. GForth 0.7.0 trên Windows. Tôi đoán có một lỗi trong disassembler của GForth 0.7.3 trên Ubuntu. –

+0

Tôi cũng đã kiểm tra trên Ubuntu 16.04. Tôi đã có GForth 0.7.2 và điều tương tự cũng xảy ra: 'Code +' được hiển thị và terminal bị khóa. Rất có thể là một lỗi, hoặc trong 'thấy', hoặc, nhiều khả năng, trong bộ tách rời. –

Trả lời

2

Hoàn nguyên về the old ptrace method đã làm điều đó cho tôi.

Thứ nhất, từ dòng lệnh là người dùng gốc chạy:

echo 0 >/proc/sys/kernel/yama/ptrace_scope 

Sau đó see nên tháo rời bất cứ điều gì nó không thể dịch ngược. Ví dụ dòng lệnh (không cần phải gốc):

gforth -e "see + bye" 

Output:

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 

Credit: Anton Ertl

Các vấn đề liên quan