Windows 実行ファイル内の変数領域の使い方について

Windows のPE形式のプログラム内の変数領域の使い方について質問があったので簡単に説明してみようと思います。

1. セクション内の属性

pe1
まず、セクションごとに属性を持っています。
基本的に使うのは書き込み・読込・実行・共有・キャッシュの可否・アラインメントです。
読み込み専用の変数領域に書き込もうとするとアプリはクラッシュします。

2.より大きい仮想サイズ
pe2
稀に、仮想サイズの方が実際の確保領域より大きいセクションが存在します。
この場合は、存在する実領域までは、規定通りに初期化され、仮想領域がオーバーしたところは0クリアされます。

pe3

例えば、こんな風に逆アセンブラで表示されない領域(赤字)になります。

おすすめ

6件のフィードバック

  1. Windows 2000 Warrior より:

    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

  2. 黒翼猫 より:

    >>1
    Is correct these code , After change base address of your dll ?

  3. Windows 2000 Warrior より:

    >>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

  4. Windows 2000 Warrior より:

    >>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 ?

  5. Windows 2000 Warrior より:

    even i change the base address the same problem , but addresses changed in assembler

  6. 黒翼猫 より:

    >>3
    Rebase can check your mistake about relocation table.
    Of course not use rebased dll.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です