5
GDB에서 "info line func_name"을 사용하여 func_name의 메모리 주소를 얻은 다음 "set $ PC = memory_address"를 사용하여이 기능의 디버깅을 시작할 수 있습니다. lldb에서 어떻게합니까? 미리 감사드립니다!lldb를 사용하여 함수의 메모리 주소를 찾는 방법은 무엇입니까?
GDB에서 "info line func_name"을 사용하여 func_name의 메모리 주소를 얻은 다음 "set $ PC = memory_address"를 사용하여이 기능의 디버깅을 시작할 수 있습니다. lldb에서 어떻게합니까? 미리 감사드립니다!lldb를 사용하여 함수의 메모리 주소를 찾는 방법은 무엇입니까?
lldb의 명령은 "이미지 조회"입니다. "info func"< -> "image lookup"의 예가 최근에 lldb/gdb 명령 페이지에 추가 된 것 같습니다 - http://lldb.llvm.org/lldb-gdb.html
이 비록
(lldb) im loo -n puts
1 match found in /usr/lib/system/libsystem_c.dylib:
Address: libsystem_c.dylib[0x0000000000011d9a] (libsystem_c.dylib.__TEXT.__text + 69850)
Summary: libsystem_c.dylib`puts
(lldb)
는 당신에게 여기 libsystem_c.dylib 오프셋 (0x11d9a)를 보여주고있다 - 당신이 범위를 표시합니다 이미지 검색에 "-v"옵션을 사용할 필요가 실제로드 주소를보고 커버하는 주소의 또는 당신은 내가 lldb 여기에 함수 프로토 타입을 필요로했기 때문에() 풋 캐스팅했다
(lldb) reg read pc
rip = 0x0000000100000f2b a.out`main + 11 at a.c:3
(lldb) reg write pc `(void(*)())puts`
(lldb) reg read pc
rip = 0x00007fff99ce1d9a libsystem_c.dylib`puts
OK, lldb에서 다시 틱 표기법과 더 직접적으로이 작업을 수행 할 수 - 슈퍼 불편을하지만, 자신의 기능 중 하나 인 경우 그 필요하지 않습니다 :
(lldb) reg write pc `main`
(lldb) reg read pc
rip = 0x0000000100000f20 a.out`main at a.c:2