本文目錄一覽:
python怎麼修改某個內存地址的數據
使用ctypes模塊調用WriteProcessMemory函數,在創建程序進程後,就可以修改該程序指定內存地址。WriteProcessMemory的函數原型如下所示。
BOOL WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesWritten
);
其參數含義如下。
· hProcess:要寫內存的進程句柄。
· lpBaseAddress:要寫的內存起始地址。
· lpBuffer:寫入值的地址。
· nSize:寫入值的大小。
· lpNumberOfBytesWritten :實際寫入的大小。
python代碼示例如下:
from ctypes import *
# 定義_PROCESS_INFORMATION結構體
class _PROCESS_INFORMATION(Structure):
_fields_ = [(‘hProcess’, c_void_p),
(‘hThread’, c_void_p),
(‘dwProcessId’, c_ulong),
(‘dwThreadId’, c_ulong)]
# 定義_STARTUPINFO結構體
class _STARTUPINFO(Structure):
_fields_ = [(‘cb’,c_ulong),
(‘lpReserved’, c_char_p),
(‘lpDesktop’, c_char_p),
(‘lpTitle’, c_char_p),
(‘dwX’, c_ulong),
(‘dwY’, c_ulong),
(‘dwXSize’, c_ulong),
(‘dwYSize’, c_ulong),
(‘dwXCountChars’, c_ulong),
(‘dwYCountChars’, c_ulong),
(‘dwFillAttribute’, c_ulong),
(‘dwFlags’, c_ulong),
(‘wShowWindow’, c_ushort),
(‘cbReserved2’, c_ushort),
(‘lpReserved2’, c_char_p),
(‘hStdInput’, c_ulong),
(‘hStdOutput’, c_ulong),
(‘hStdError’, c_ulong)]
NORMAL_PRIORITY_CLASS = 0x00000020 # 定義NORMAL_PRIORITY_CLASS
kernel32 = windll.LoadLibrary(“kernel32.dll”) # 加載kernel32.dll
CreateProcess = kernel32.CreateProcessA # 獲得CreateProcess函數地址
ReadProcessMemory = kernel32.ReadProcessMemory # 獲得ReadProcessMemory函數地址
WriteProcessMemory = kernel32.WriteProcessMemory # 獲得WriteProcessMemory函數地址
TerminateProcess = kernel32.TerminateProcess
# 聲明結構體
ProcessInfo = _PROCESS_INFORMATION()
StartupInfo = _STARTUPINFO()
file = ‘ModifyMe.exe’ # 要進行修改的文件
address = 0x0040103c # 要修改的內存地址
buffer = c_char_p(“_”) # 緩衝區地址
bytesRead = c_ulong(0) # 讀入的字節數
bufferSize = len(buffer.value) # 緩衝區大小
# 創建進程
if CreateProcess(file, 0, 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, byref(StartupInfo), byref(ProcessInfo)):
# 讀取要修改的內存地址,以判斷是否是要修改的文件
if ReadProcessMemory(ProcessInfo.hProcess, address, buffer, bufferSize, byref(bytesRead)):
if buffer.value == ‘\x74’:
buffer.value = ‘\x75’ # 修改緩衝區內的值,將其寫入內存
# 修改內存
if WriteProcessMemory(ProcessInfo.hProcess, address, buffer, bufferSize, byref(bytesRead)):
print ‘成功改寫內存!’
else:
print ‘寫內存錯誤!’
else:
print ‘打開了錯誤的文件!’
TerminateProcess(ProcessInfo.hProcess,0) # 如果不是要修改的文件,則終止進程
else:
print ‘讀內存錯誤!’
else:
print ‘不能創建進程!’
python控件批量賦值
test1,test2控件是在Test列表裡面?是要把每個控件的變量設置文本的內容?即exec(“self.ui.test1.setText(“test1″)”)和(“self.ui.test2.setText(“test2″)”)??如果是這樣的話可以使用這樣寫
for i in range(len(Test)):
exec(“self.ui.%s.setText(‘%s’)”%(Test[i],Test[i]))
或者不用索引
for i in Test:
exec(“self.ui.%s.setText(‘%s’)”%(i,i))
希望有幫助。。。。
python中怎麼批量修改字典中values值
for dic_key in dic:
dic[dic_key] = dataframe的values值
就是一個拿出字典的Value賦值的過程。入門級的喲。
原創文章,作者:PRBOP,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130135.html