Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfe6a0cb

Browse files
committed
remove write function
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
1 parent4ffe070 commitfe6a0cb

File tree

2 files changed

+56
-66
lines changed

2 files changed

+56
-66
lines changed

‎Include/internal/pycore_remote_debug.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ PyAPI_FUNC(uintptr_t) _Py_RemoteDebug_GetAsyncioDebugAddress(proc_handle_t *hand
3737
// Read memory from a remote process
3838
PyAPI_FUNC(int)_Py_RemoteDebug_ReadRemoteMemory(proc_handle_t*handle,uintptr_tremote_address,size_tlen,void*dst);
3939

40-
// Write memory to a remote process
41-
PyAPI_FUNC(int)_Py_RemoteDebug_WriteRemoteMemory(proc_handle_t*handle,uintptr_tremote_address,size_tlen,constvoid*src);
42-
4340
// Read debug offsets from a remote process
4441
PyAPI_FUNC(int)_Py_RemoteDebug_ReadDebugOffsets(proc_handle_t*handle,uintptr_t*runtime_start_address,_Py_DebugOffsets*debug_offsets);
4542

‎Python/remote_debugging.c

Lines changed: 56 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,62 @@ read_memory(proc_handle_t *handle, uint64_t remote_address, size_t len, void* ds
8080
staticint
8181
write_memory(proc_handle_t*handle,uintptr_tremote_address,size_tlen,constvoid*src)
8282
{
83-
return_Py_RemoteDebug_WriteRemoteMemory(handle,remote_address,len,src);
83+
#ifdefMS_WINDOWS
84+
SIZE_Twritten=0;
85+
SIZE_Tresult=0;
86+
do {
87+
if (!WriteProcessMemory(handle->hProcess, (LPVOID)(remote_address+result), (constchar*)src+result,len-result,&written)) {
88+
PyErr_SetFromWindowsErr(0);
89+
return-1;
90+
}
91+
result+=written;
92+
}while (result<len);
93+
return0;
94+
#elif defined(__linux__)&&HAVE_PROCESS_VM_READV
95+
structioveclocal[1];
96+
structiovecremote[1];
97+
Py_ssize_tresult=0;
98+
Py_ssize_twritten=0;
99+
100+
do {
101+
local[0].iov_base= (void*)((char*)src+result);
102+
local[0].iov_len=len-result;
103+
remote[0].iov_base= (void*)((char*)remote_address+result);
104+
remote[0].iov_len=len-result;
105+
106+
written=process_vm_writev(handle->pid,local,1,remote,1,0);
107+
if (written<0) {
108+
PyErr_SetFromErrno(PyExc_OSError);
109+
return-1;
110+
}
111+
112+
result+=written;
113+
}while ((size_t)written!=local[0].iov_len);
114+
return0;
115+
#elif defined(__APPLE__)&&TARGET_OS_OSX
116+
kern_return_tkr=mach_vm_write(
117+
pid_to_task(handle->pid),
118+
(mach_vm_address_t)remote_address,
119+
(vm_offset_t)src,
120+
(mach_msg_type_number_t)len);
121+
122+
if (kr!=KERN_SUCCESS) {
123+
switch (kr) {
124+
caseKERN_PROTECTION_FAILURE:
125+
PyErr_SetString(PyExc_PermissionError,"Not enough permissions to write memory");
126+
break;
127+
caseKERN_INVALID_ARGUMENT:
128+
PyErr_SetString(PyExc_PermissionError,"Invalid argument to mach_vm_write");
129+
break;
130+
default:
131+
PyErr_Format(PyExc_RuntimeError,"Unknown error writing memory: %d", (int)kr);
132+
}
133+
return-1;
134+
}
135+
return0;
136+
#else
137+
Py_UNREACHABLE();
138+
#endif
84139
}
85140

86141
staticint
@@ -679,68 +734,6 @@ _Py_RemoteDebug_ReadRemoteMemory(proc_handle_t *handle, uintptr_t remote_address
679734
#endif
680735
}
681736

682-
// Platform-independent memory write function
683-
int
684-
_Py_RemoteDebug_WriteRemoteMemory(proc_handle_t*handle,uintptr_tremote_address,size_tlen,constvoid*src)
685-
{
686-
#ifdefMS_WINDOWS
687-
SIZE_Twritten=0;
688-
SIZE_Tresult=0;
689-
do {
690-
if (!WriteProcessMemory(handle->hProcess, (LPVOID)(remote_address+result), (constchar*)src+result,len-result,&written)) {
691-
PyErr_SetFromWindowsErr(0);
692-
return-1;
693-
}
694-
result+=written;
695-
}while (result<len);
696-
return0;
697-
#elif defined(__linux__)&&HAVE_PROCESS_VM_READV
698-
structioveclocal[1];
699-
structiovecremote[1];
700-
Py_ssize_tresult=0;
701-
Py_ssize_twritten=0;
702-
703-
do {
704-
local[0].iov_base= (void*)((char*)src+result);
705-
local[0].iov_len=len-result;
706-
remote[0].iov_base= (void*)((char*)remote_address+result);
707-
remote[0].iov_len=len-result;
708-
709-
written=process_vm_writev(handle->pid,local,1,remote,1,0);
710-
if (written<0) {
711-
PyErr_SetFromErrno(PyExc_OSError);
712-
return-1;
713-
}
714-
715-
result+=written;
716-
}while ((size_t)written!=local[0].iov_len);
717-
return0;
718-
#elif defined(__APPLE__)&&TARGET_OS_OSX
719-
kern_return_tkr=mach_vm_write(
720-
pid_to_task(handle->pid),
721-
(mach_vm_address_t)remote_address,
722-
(vm_offset_t)src,
723-
(mach_msg_type_number_t)len);
724-
725-
if (kr!=KERN_SUCCESS) {
726-
switch (kr) {
727-
caseKERN_PROTECTION_FAILURE:
728-
PyErr_SetString(PyExc_PermissionError,"Not enough permissions to write memory");
729-
break;
730-
caseKERN_INVALID_ARGUMENT:
731-
PyErr_SetString(PyExc_PermissionError,"Invalid argument to mach_vm_write");
732-
break;
733-
default:
734-
PyErr_Format(PyExc_RuntimeError,"Unknown error writing memory: %d", (int)kr);
735-
}
736-
return-1;
737-
}
738-
return0;
739-
#else
740-
Py_UNREACHABLE();
741-
#endif
742-
}
743-
744737
staticint
745738
is_prerelease_version(uint64_tversion)
746739
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp