Я пишу .SO, который вызывается другой программой, и я хочу иметь возможность перевернуть значение в памяти через функцию в .SO
То, что я имею до сих пор:
int
axptrace( int numArguments, char* pMessageBuffer, int* pMessageBufferSize,
char* pData[], int* pDataLength[] )
{
printf("Beginning dump attempt..\n");
unsigned int* wkptr =(int*)0x7f793db70040;
printf("At %llx, the value was %d\n\n",(long long)wkptr,*wkptr);
if(*wkptr == 1){
printf("Switching the value.\n");
*wkptr = 0;
printf("At %llx, the value is now %d\n\n",(long long)wkptr,*wkptr);
printf("Switched!\n\n");
}
printf("Ending dump attempt..\n");
}
При запуске программы я получаю ожидаемые сообщения:
Начало попытки сброса ..
На 7f793db70040 значение было 1
Переключение значения.
На 7f793db70040 значение теперь равно 0
Switched!
Завершение попытки сброса ..
Начало попытки сброса ..
На 7f793db70040 значение было 0
Завершение попытки сброса ..
Если я снова запусту ту же функцию, вместо того, чтобы увидеть значение 0 в первой части, я снова увижу значение 1. Я думал, что это изменило значение в 0x7f793db70040, но, очевидно, оно вернулось к старому значению.
Кроме того, 0xf793db70040 был получен через отладчик. Есть ли способ увидеть, указывает ли «символ» или что-то подобное на этот адрес, и способ использовать это в моем коде?