Windows 実行ファイル内の変数領域の使い方について
Windows のPE形式のプログラム内の変数領域の使い方について質問があったので簡単に説明してみようと思います。
1. セクション内の属性
まず、セクションごとに属性を持っています。
基本的に使うのは書き込み・読込・実行・共有・キャッシュの可否・アラインメントです。
読み込み専用の変数領域に書き込もうとするとアプリはクラッシュします。
2.より大きい仮想サイズ
稀に、仮想サイズの方が実際の確保領域より大きいセクションが存在します。
この場合は、存在する実領域までは、規定通りに初期化され、仮想領域がオーバーしたところは0クリアされます。
例えば、こんな風に逆アセンブラで表示されない領域(赤字)になります。
there is a solution to make the assembler display the code of red area ?, to extract this function , it should call this red address in execution of instruction as this
L7C58EFBA:
cmp dword ptr [ebp-08h],00000000h
jge L7C58EFC7 ;finished because it’s normal and assmbler display it
and dword ptr [L7C5CC5A4],00000000h ;L7C5CC5A4 not finished beacuse it’s red
L7C58EFC7:
call [ntdll.dll!RtlReleasePebLock]
mov eax,[L7C5CC5A4] ;not finished beacuse it’s red
pop edi
pop esi
pop ebx
leave
retn
>>1
Is correct these code , After change base address of your dll ?
>>2
No, I’m not changing the base address because I’ve changed the way to add the API, I’m working with an xeno86 automated script, and this method works as follows:
extract API code in .asm file example i extract GetProcessIoCounter api from kerne32.dll of win2000 to an blank .asm file, and this automated script convert GetProcessIoCounter.asm to GetProcessIoCounter.cpp file and finally I added this code from GetProcessIoCounter.cpp in kernel32.cpp , and the automated scipt create KEX file in system32 , and finaly i chnage KEX fil name to kernel32.dll , this method does not require base changing
>>2 ah ,i think i understand what you mean , i must change the base address of kernel32.dll to higher base address to correct this red address , this right ?
even i change the base address the same problem , but addresses changed in assembler
>>3
Rebase can check your mistake about relocation table.
Of course not use rebased dll.