- 论坛徽章:
- 0
|
本帖最后由 kdx_test 于 2020-05-18 22:48 编辑
对于 PTRACE_POKETEXT,写入的地址有要求吗?
此外,我baidu了一下ptrace,但找不到合适的解决方法。各位,有碰到类似的情况吗?
附部分代码如下:
- int pid_write(int pid, void *dest, const void *src, size_t len)
- {
- int count = len / sizeof(void*);
- unsigned char *s = (unsigned char *)src;
- unsigned char *d = (unsigned char *)dest;
- while(count != 0)
- {
- if(ptrace(PTRACE_POKETEXT, pid, d, *(void **)s) == -1)
- {
- goto err;
- }
- s += sizeof(void *);
- d += sizeof(void *);
- count--;
- }
- return 0;
- err:
- perror("PTRACE_POKETEXT");
- return -1;
- }
- #define ADDRESS 0x200000
- int main(int argc, char **argv)
- {
- int fd;
- struct stat st;
- unsigned char *exe;
- fd = open(test_file, O_RDONLY);
- fstat(fd, &st);
- exe = malloc(WORD_ALIGN(st.st_size));
- read(fd, exe, st.st_size);
- ==> pid_write(pid, (void*)ADDRESS, (void*)exe, st.st_size); //语句1
- ..........
- }
- 执行到语句1时报错:
- PTRACE_POKETEXT: Input/output error
复制代码
|
|