не записывается данные в процесс

сделал для примера такую программу.

#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 );
}

Ответы (0 шт):