Biorąc pod uwagę adres pamięci, chciałbym wydrukować to zawartość skryptu LLDB.

Wypróbowałem różne podejścia, aby uzyskać sbvalue, biorąc pod uwagę adres, ale żaden z nich nie pracował dla mnie, mianowicie

buffer = lldb.SBData()
buffer.CreateDataFromCString(lldb.eByteOrderBig, 10, "0x00007fffe45e3000")

Ale kiedy pójdę do zapytania o obiekt nic pokazanego.

Próbowałem również przypisać adres do zmiennej wygody w LLDB, a następnie użyj FindVariable (), ale zmienna jest pusta

expr auto $buffer =  function_returning_address();
>>> buffer = lldb.frame.FindVariable("$buffer")

Ale znowu zmienna nie ma nazwy, typu itp. Wypróbowałem również z sbvalue.setvaluefromCstring ()

>>> buffer.SetValueFromCString("0x00007fffe45e3000", error)
False
>>> print error
error: Could not get value: No value

Nie znalazłem zbyt dużej dokumentacji w Google i po prostu zaczynam od skryptów LLDB, każda sugestia jest doceniana.

Dzięki.

1
emitrax 20 lipiec 2020, 11:25

1 odpowiedź

Najlepsza odpowiedź

Istnieją dwa sposoby, aby to zrobić. Jeśli chcesz surowe dane, możesz poprosić swoją SBProcess, aby przeczytać pamięć jako array bajtów Python za pomocą Sbprocess.Readmemory. Jeśli chcesz przedstawić dane na tym adresie jako instancja jakiegoś typu, możesz użyć sbtarget.CreatevalueFromAddress. Aby znaleźć typ do tego, użyj sbtarget.findfirsttype ...

2
Jim Ingham 20 lipiec 2020, 17:59