이 뮤니티 디버거의 immlib 라이브러리에서 다른 기능을 찾고있었습니다. 나는 디버거에서 파이썬 쉘을 시작하고 다음 명령을 실행 :디버거의 기본 주소와 실제 주소의 차이
>>>imm.assemble("jmp esp")
'\xff\xe4'
>>>imm.search("\xff\xe4")
[2090082029, 4411432, 2011716026, 2011814593, 2011483641, 2011550166, 2012419704, 1714392763, 1714402743, 2011113280, 2011241515, 2011395627, 2011399149, 2010689290, 2010819775, 2010819791, 2010819803, 2010845836, 2010849532, 2010849836, 2010851408, 2010855771, 2010855971, 2010856648, 2010856656, 2010856660, 2010857271, 2010857704, 2010857708, 2010857712, 2010857855, 2010857908, 2010857916, 2010858051, 2010859271, 2010860975, 2010863952, 2010864044, 2010864056, 2010864200, 2010864484, 2010864488, 2010864492, 2010866771, 2010866843, 2010867036, 2010882823, 2010883011, 2010890923, 2010893560, 2010897288, 2010897596, 2010903483, 2010903683, 2010904360, 2010904368, 2010904372, 2010905416, 2010905420, 2010905424, 2010905620, 2010905628, 2010906983, 2010908687, 2010911155, 2010911372, 2010911496, 2010911624, 2010911628, 2010911632, 2010911668, 2010911760, 2010911948, 2010912060, 2010912064, 2010912192, 2010912343, 2010912471, 2010914759, 2010938463, 2010938479, 2010938491]
>>>imm.findModule(2090082029)
('ntdll.dll', 2089811968)
그래서 첫 번째 명령은 "JMP ESP"명령을 조립합니다. 다음 명령은 메모리 공간에서 어셈블 된 명령어를 검색합니다. 그런 다음 마지막 명령 (imm.findModule)은 어셈블 된 명령어가 들어있는 모든 모듈을 찾습니다.
내 쿼리는 두 번째 및 세 번째 명령에서 반환 된 주소입니다.
두 번째 명령에서 반환 된 주소가 디버깅 된 프로세스의 메모리 공간에만 속하는지 또는 디버거가 어셈블 된 명령을 검색하기 위해 사용 가능한 전체 메모리 공간을 검색합니까?
잘못된 것이 아니라면 세 번째 명령 ('ntdll.dll', 2089811968)
에 대해 반환 된 주소가 모듈 자체의 기본 주소입니까?
다음 질문은 모듈이 현재 프로그램의 메모리 공간에 있는지 확인하는 것입니다.
내 마지막 쿼리에서 다음을 요약합니다. 기본 주소와 실제 주소의 차이점은 무엇입니까?
GetModuleHandle은 모듈이 메모리에로드되었는지 확인하는 API입니다. 파이썬이나 면역 디버거는 사용하지 않지만 검사 할 API를 호출 할 수 있어야합니다. 실제 주소로 디버깅하는 것과 관련해서는 아무 것도 없습니다 (실제 주소에 대해 말하지 않는 한?). 기본 주소는 모듈의 EP입니다. – Paul