2009-09-13 2 views
0

Perl에서 PE 파일을 사용하고 싶기 때문에 모듈을 찾지 못했습니다. 그래서 저는 제 자신을 작성할 것입니다 (이미 델파이에서 한 번했습니다).Perl을 사용하여 WinNT 이식 가능 실행 파일에서 헤더를 읽으려면 어떻게해야합니까?

실행 파일을 버퍼에 매핑 할 때 한 가지 문제가 있습니다. 어떻게 0x00004550 (IMAGE_NT_SIGNATURE)과 같은 8 진수를 검색하고 다시 쓰기 가능한 문자열 등으로 변환 할 수 있습니까?

답변

9

여기 입니다. 이식 가능한 실행 파일을 조작하는 Perl 모듈 : Win32::Exe.

정확한 질문에 대한 단서가 없지만 여전히 자신의 라이브러리를 작성하려는 경우 Win32::Exe을 참조하십시오.

+0

덕분에, 내가는 Win32 : EXE를 사용하고 '지금 objdump'입니다 :) – maxedmelon

2

해당 값을 바이트 표현으로 변환하려면 pack을 사용하십시오. 처리중인 상수는 리틀 엔디 언 32 비트 값이므로 템플릿의 'V'입니다.

$ perl -e 'print pack q[V], 0x00004550' | hd 
00000000 50 45 00 00          |PE..| 
00000004 

자세한 내용은 perldoc -f pack을 참조하십시오.

"PE \ 0 \ 0"과 같은 문자열을 검색 할 필요가 없을 것입니다. 실제로 읽는 파일이 PE 파일인지 여부를 확인하기 위해 사용하십시오. 'PE'섹션은 보통 자체 길이 필드가있는 DOS ('MZ') 섹션 바로 뒤에 있습니다.

은 (내가 Win32::Exe 당신이 무엇을 원하는에 따라 볼 가치가 될 수 있음에 동의합니다.)

관련 문제