2014-02-18 5 views
0

저는 사실 파이썬에 익숙하지 않습니다. 사실 IDA 프로 스크립트 제작에 사용하고 있습니다. 따라서 이해하기 쉽지만, 긴 형식을 유니 코드 문자열로 변환하는 데 어려움을 겪고 있습니다. 내 스크립트의 조각은 :유니 코드 문자열에 대한 파이썬 포인터

def get_ModAddr(list, modname): 
    flink = Dword(list) 
    original = Dword(list) 
    while True: 
     pbasename = Dword(flink+0x30) 
     ############################################################ 
     # pbasename now is type long and points to a UNICODE string 
     ############################################################ 
     if modname == pbasename: 
      return Dword(list+0x18) 
     flink = Dword(flink) 
     if ((flink == original) or (flink == BADADDR)): 
      break 
    Message("Could not find module.") 
    return None 


#DO ALL 
list = get_PsLoadedModuleList() 
if list: 
    print "PsLoadedModuleList: %x"%(list) 
    modname = unicode("DHSD.sys") 
    print "Searching for module %s"%(modname) 
    modaddr = get_ModAddr(list, modname) 
    if modaddr: 
     print "module addr: %x"%(modaddr) 

그래서 내가하고 싶은 유니 코드 문자열을 참조 "pbasename"(긴 타입)으로 변환하고이 동일 있는지 확인하기 위해 "모듈 이름"을 참조하여 비교하는 것입니다.

감사합니다.

답변

0

나는 당신이 찾고있는 것은 pbasename 가정하면 유니 코드 문자열의 메모리 위치에 대한 포인터입니다

GetString(pbasename, -1, ASCSTR_UNICODE)

믿습니다. 이것은 modname을 유니 코드로 변환 할 필요가 없도록 'str'(유니 코드가 아닌) 유형의 문자열을 반환합니다.

+1

문자열에 인코딩 된 유니 코드가 포함되어 있으면 str.decode ('utf-8') 또는 인코딩이 무엇이든 상관 없습니다. – tripleee