주어진 파이썬이 주어진 바이너리에서 주어진 프레임이 실행되는지 알아보기 위해 파이썬 확장을 사용하려고합니다. 구체적으로 :함수를 포함하는 바이너리 찾기.
루비 스택 추적을보고 있는데, 프레임이 루비/libruby 또는 다른 바이너리에서 온 것인지 자동으로 알리고 싶습니다. 이에 대한 주요 기준은 프레임의 pc
이 ruby_exec_node
과 동일한 soname
에 속하는 지 여부입니다.
이것은 GDB 자체 행할 : 두 기호 /host/ruby-2.3.3
에서 온 것을 볼 수 있습니다
#69 0x00007fe00444e783 in invoke_block (...) at vm.c:921
921 in vm.c
(gdb) info symbol 0x00007fe00444e783
invoke_block.isra + 387 in section .text of /host/ruby-2.3.3
(gdb) info symbol ruby_exec_node
ruby_exec_node in section .text of /host/ruby-2.3.3
. 파이썬은 gdb.solib_name
를 통해이 액세스 할 수 있어야합니다 같은 문서에서
, 그것은 보이는,하지만 난 이것을 얻을 수 없습니다
ruby_exec_node = gdb.lookup_global_symbol('ruby_exec_node')
ruby_solib = gdb.solib_name(ruby_exec_node.value().address)
print(ruby_solib)
나에게 None
을 제공합니다. 그 밖의 다른 방법으로 기호에서이 정보를 얻을 수 있습니까?
두 번째 부분은 pc
주소에서 동일한 정보를 얻고 있습니다. 나는 주소를 얻기 위해 다음을 수행 할 수
gdb.selected_frame().pc()
하지만 어떻게 info symbol ...
유사가에 해당하는 기호를 찾을 수 있습니까? 그 2 문제