В программе c
Я пытаюсь изменить адрес указателя, то есть адрес кучи, на адрес стека, чтобы я мог получить адрес возврата из стека. Я могу передать желаемый адрес через вход.Изменить адрес указателя на адрес стека вместо адреса кучи
Код использует указатель на распределение памяти в куче, используя malloc.
char* bufferPtr;
bufferPtr= (char*)malloc(strlen(arg2)+4);
В значениях БГД, связанных с выше коде 0x0804000a 0x0804b008
0xbfffcf80: 0x41414141 0x0804000a 0x0804b008 0x4ef9dd66
То, что эти два адреса соответствуют, потому что мне нужно изменить этот указатель, чтобы указать на некоторый адрес (скажем 0xbfffcfd0
) в стеке. Итак, какое из этих двух значений нужно коснуться.
Я перепробовал много возможностей, но тогда я получаю следующее сообщение об ошибке:
Program received signal SIGSEGV, Segmentation fault.
__strcpy_sse2() at ../sysdeps/i386/i686/multiarch/strcpy-sse2.S:2211
Если вам нужна память в стеке, создайте локальную (стек) переменную. –
У меня есть переменная стека, и у меня есть ее адрес, но если я заменил «0x0804b008» на «Новый адрес», тогда я получу ошибку. Я подозреваю, что «0x0804000a» может вызвать проблемы. Потому что '0x0804000a' соответствует' char * bufferPtr; 'и' 0x0804b008' - это фактический адрес в куче. Поэтому, если я меняю этот адрес, мне также нужно изменить '0x0804000a', но я не знаю, с какими значениями я должен его заменить – user5708039
Что вы пробовали, когда получили ошибку сегментации? Еще немного кода будет полезно. См. [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и [как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/ помощь/mcve). –