2017-05-17 10 views
5

Ja przygotowuje ogólną wiedzę na temat budowania Forth interpreter i chce zdemontować niektóre generycznych Forth słów kodowych takich jak +, -, * itpDissassembly of Forth słów kodowych z 'zobaczyć'

My gforth (Obecnie mam wersję 0.7.3, zainstalowaną na systemie Ubuntu Linux) pozwoli mi na zdemontowanie definicji dwukropka, które wykonuję za pomocą polecenia see, a także pojedynczego słowa kodowego .. Ale kiedy próbuję go z innymi słowami kodu, see + lub see /, pojawia się błąd, który mówi, Code +, a następnie nie mogę już pisać w moim terminalu, nawet gdy naciskam control-c.

powinienem być w stanie dekompilować/demontować słów kodowych, jak wynika z instrukcji gforth: https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Decompilation-Tutorial.html

Czy ktoś miał ten problem i nie wiesz jak go rozwiązać?

+0

myślę, że drukuje rzeczywiste wartości binarnych słowem - i binarne dane zepsują twój terminal. –

+1

Sprawdziłem w systemie Windows. 'see +' wyświetla wiersz 'Code +', po którym następuje dezasemblacja tego słowa. GForth 0.7.0 w systemie Windows. Zgaduję, że jest błąd w deasemblatorze GForth 0.7.3 na Ubuntu. –

+0

Sprawdziłem także Ubuntu 16.04. Miałem GForth 0.7.2 i to samo działo się: wyświetliło się 'Code +' i terminal został zablokowany. Najprawdopodobniej błąd, albo w "zobacz", albo, bardziej prawdopodobne, w dezasembler. –

Odpowiedz

2

Wróciłem do the old ptrace method zrobiłem to za mnie.

Po pierwsze, z linii poleceń jako użytkownik korzenia Run:

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

Po czym see należy rozmontować, co nie może dekompilować. Przykład linii poleceń (nie muszą być korzeń):

gforth -e "see + bye" 

wyjściowa:

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 

kredytowe: Anton Ertl

Powiązane problemy