2014-06-17 6 views
0

프로그램 실행을 추적해야하므로 무한 루프를 만들고 pc 레지스터를 읽고 단계를 수행하기로 결정했습니다.LLDB 파이썬 디버거 레지스터 읽기

은 플랫폼 : 같은 방법으로 IOS

나는 프로그램의 실행 흐름을 추적합니다.

질문입니다 - 어떻게하면 LLDB python API를 통해 $ pc 등록을해야합니까?

답변

0

프로그램에 스레드가 두 개 이상 있고 각 스레드마다 다른 PC가 있습니다. 따라서 SBProcess 객체로 시작하면 SBThread 객체로 표현되는 스레드를 반복하는 "threads"속성을 갖게됩니다. SBThread는 모든 "SBFrames"의 배열 인 "frames"속성을 가지고 프레임 [0]은 맨 아래 프레임입니다. SBFrame은 pc 인 "pc"속성을 가지고 있습니다. 파이썬 SB의 API 년대의이 표는 당신을 도울 수 있습니다

LLDB Python APIs

그러나, 당신은 엑스 코드에서 작동하지 않습니다 무엇을하려고 - 일반적으로 iOS에서 디버깅을 할 수있는 유일한 방법입니다. Xcode와 Python은 현재 프로세스 실행을 제어 할 수있는 사람과 싸우며 어떤 시점에서는 잘못된 배우가 이기고 실행됩니다.

당신은 독립형 파이썬 드라이버를 사용하여 이런 종류의 작업을 수행 할 수 있습니다, 예를 들어 어떤이다 :

Process Events Example

하지만 당신은 정말 독립형에서 아이폰 OS 프로세스에 연결할 수 없기 때문에 lldb, iOS 개발에 사용하기가 어렵습니다.

나는 가끔 Mac OS X에서 설명하는 것을 수행했으며 실제로는 너무 느립니다. 절망적 일 때만 이것을하고 싶을 것입니다. 당신은 어떤 주어진 모듈을 통해 추적에 대한 관심이 경우,

(lldb) break set -r . 

과 :

당신은 가끔 사용하면 lldb 명령 줄에서 할 수있는 모든 함수 진입 점에 중단 점을 넣어 같은 효과를 얻을 수 있습니다 --shlib 옵션을 "break set"행에 한 번 이상 추가하여 중단 점을 해당 라이브러리로 제한 할 수 있습니다. 그런 다음 파이썬에서 할 수있는 중단 점 명령을 작성하여 필요한 정보를 수집하십시오. 이것은 여전히 ​​느리지 만 사용 가능에 가깝습니다.

+0

정말 고마워요, 짐! 정말 유용한 정보. 나는 개발 중이 아니며 몇 가지 맬웨어 바이너리를 탐색 중이므로 활동을 추적 한 다음 추출 된 정보를 IDA에 매핑하여 더 깊게보고 싶습니다. 더 많은 조언이 있다면, 공유하십시오 : D 다시 한번 감사드립니다! – RIO