2
저는 오래 전에 인터넷에 공개 된 프로젝트를 이용했습니다. 세부 사항은 여기에 있으며 모든 관련없는 것들은 간결하고 명확하게하기 위해 제거됩니다.외부 파일에서로드 된 코드의 일부 실행이 DEP에 의해 중지되지 않는 이유는 무엇입니까?
내용이
HEX 덤프 이하 통해 VII되는 이진 파일 :
55 89 E5 83 EC 08 C7 45 FC 00 00 00 00 8B 45 FC
3B 45 10 72 02 EB 19 8B 45 FC 8B 55 0C 01 C2 8B
45 FC 03 45 08 8A 00 88 02 8D 45 FC FF 00 EB DD
C6 45 FA 00 83 7D 10 01 76 6C 80 7D FA 00 74 02
EB 64 C6 45 FA 01 C7 45 FC 00 00 00 00 8B 45 10
48 39 45 FC 72 02 EB E2 8B 45 FC 8B 4D 0C 01 C1
8B 45 FC 03 45 0C 8D 50 01 8A 01 3A 02 73 30 8B
45 FC 03 45 0C 8A 00 88 45 FB 8B 45 FC 8B 55 0C
01 C2 8B 45 FC 03 45 0C 40 8A 00 88 02 8B 45 FC
03 45 0C 8D 50 01 8A 45 FB 88 02 C6 45 FA 00 8D
45 FC FF 00 EB A7 C9 C2 0C 00 90 90 90 90 90 90
가
var
MySrcArray,
MyDestArray: array [1 .. 15] of Byte;
// ...
MyBuffer: Pointer;
TheProc: procedure;
SortIt: procedure(ASrc, ADest: Pointer; ASize: LongWord); stdcall;
begin
// Initialization of MySrcArray with random Bytes and display here ...
// Instructions of loading of the binary file into MyBuffer using merely **GetMem** here ...
@SortIt := MyBuffer;
try
SortIt(@MySrcArray, @MyDestArray, 15);
// Display of MyDestArray (The outcome of the processing !)
except
// Invalid code error handling
end;
// Cleaning code here ...
end;
니펫 다음
방법을 사용하여 메모리에로드되고 실행될 내 상자에 매력처럼 작동합니다.
내 질문 :
방법은 VirtualAlloc
및/또는 VirtualProtect
를 사용하지 않고 작동 온다?
예, 실제로 DEP와 관련이 있습니다. – menjaraz