これは、Xcode (バージョン 4.5) でのみ動作する私のコードです。
#include <stdio.h>
#include <mach/mach_init.h>
#include <mach/mach_vm.h>
#include <sys/types.h>
#include <mach/mach.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <Security/Authorization.h>
int main(int argc, const char * argv[]) {
char test[14] = "Hello World! "; //0x7fff5fbff82a
char value[14] = "Hello Hacker!";
char test1[14];
pointer_t buf;
uint32_t sz;
task_t task;
task_for_pid(current_task(), getpid(), &task);
if (vm_write(current_task(), 0x7fff5fbff82a, (pointer_t)value, 14) == KERN_SUCCESS) {
printf("%s\n", test);
//getchar();
}
if (vm_read(task, 0x7fff5fbff82a, sizeof(char) * 14, &buf, &sz) == KERN_SUCCESS) {
memcpy(test1, (const void *)buf, sz);
printf("%s", test1);
}
return 0;
}
私はptraceなども試していました。これが、他のライブラリも含めている理由です。
最初の問題は、これが Xcode でのみ機能することです。デバッガーで変数 (この場合は ) の位置 (メモリ アドレス) を見つけることができるためtest
、文字列を変更しvalue
て新しい値をコピーします。test
オンtest1
。
私は実際に vm_write がどのように機能するか (完全ではありません) を理解していませんtask_for_pid()
.そしてそれは動作します(Xcodeのみ)。
他のプロセスでそれを行うにはどうすればよいですか? 位置を読み取る必要があります (「何か」のアドレスを見つけるにはどうすればよいですか?)、これが最初の目標です。