1

メモリに特定のスペースを割り当てる必要があり、VirtualAllocこれに使用しています。VirtualAllocただし、常に 33 ビット未満であるにもかかわらず、 が 32 ビットを超えるアドレスを返すことにますます気づきました。その結果、データをこのメモリ アドレスにコピーすると、コンピューターがクラッシュして BSOD が発生します。

64 ビットの Windows と 64 ビットの Python を使用しています。データをメモリにコピーするプログラムは 32 ビットしか扱えないのではないかと思います。VirtualAllocアドレスを 32 ビット以内で提供することを強制する方法はありますか?

私はPython、具体的にはctypesを呼び出すパッケージを使用していVirtualAllocます。以下のコードを参照してください。このコードを複数回実行するとアドレスが変化するため、以下の関数を繰り返し呼び出すと最終的に 32 ビット未満のアドレスになります。ただし、問題の原因とフェイルセーフな解決策を探しています。どんな助けでも大歓迎です。

import ctypes
mem_commit = 0x1000
page_readwrite = 0x4
size_bytes = 200000  # Allocation sizes are usually around this value

ctypes.windll.kernel32.VirtualAlloc.argtypes = [
    ctypes.c_void_p, ctypes.c_long, ctypes.c_long, ctypes.c_long]
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_int

addr = ctypes.windll.kernel32.VirtualAlloc(
    0, ctypes.c_long(size_bytes), mem_commit, page_readwrite)    

を使用して後でメモリを解放することに注意してくださいVirtualFree

4

1 に答える 1