не записывается данные в процесс
сделал для примера такую программу.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int get_num ( ) {
static int index = 0;
static int size = sizeof ( a ) / sizeof ( int );
if ( index >= size ) index = 0;
int num = a[index++];
num = 10;
return num;
}
int main ( ) {
int i = 0;
printf ( "pid: %d\n", getpid ( ) );
while ( 1 ) {
int num = get_num ( );
printf ( "i:%d\n", num );
sleep ( 1 );
}
}
я точно не помню, но вроде в секцию кода нельзя делать записи, но это я читал так давно, что могу ошибаться. я видел некоторые примеры, и вроде бы они подтверждают что записать в процесс можно, но можно ли записать в чужой процесс? в общем с помощью objdump я посмотрел адрес где num = 10. вот он.
11d1: c7 45 fc 0a 00 00 00 mov DWORD PTR [rbp-0x4],0xa
для этого я написал такую программу. и захотел заменить 10 на 11. но не выходит. пишет ptrace poketext: Input/output error
.
#include <stdio.h>
#include <stdlib.h>
#include <sys/ptrace.h>
int main ( int argc, char **argv ) {
if ( argc < 2 ) return -1;
int pid = atoi ( argv[1] );
int ret = ptrace ( PTRACE_ATTACH, pid, NULL, NULL );
if ( ret == -1 ) perror ( "ptrace" );
printf ( "ret: %d\n", ret );
long addr = 0x00005555555551d4;
long opcode = 0xb;
ret = ptrace ( PTRACE_POKETEXT, pid, ( void * ) addr, ( void * ) opcode );
if ( ret == -1 ) perror ( "ptrace poketext" );
ptrace ( PTRACE_DETACH, pid, NULL, NULL );
}