【发布时间】:2021-11-02 03:05:56
【问题描述】:
所以我尝试将 uint64_t 返回地址写入缓冲区,然后验证正确的返回地址是否已写入正确的位置。这是我的代码。
uint64_t new_ret = ret - 8 - 32 - 32 - 1001 + (ret_buffer_offset + sizeof(shellcode));
printf("new_ret :%lu\n", new_ret);
snprintf(&buffer[ret_buffer_offset], 8, "%s", new_ret);
// debug code
char buffer_debug[10];
uint64_t* buffer_uint = (uint64_t*)buffer_debug;
bzero(buffer_debug, 10);
strncpy(buffer_debug, &buffer[ret_buffer_offset], 8);
uint64_t ret_debug = *buffer_uint;
printf("ret debug: %lu\n", ret_debug);
两个 printf 应该输出相同的东西,但底部的 printf 输出一个非常不同的数字。我不确定我写入缓冲区的方式是否错误,或者我获取值的方式是否错误。这里有什么问题?
谢谢
【问题讨论】:
-
只用
memcpy? -
@tstanisl lmao 谢谢,我不敢相信我忘记了 memcpy。数字仍然不匹配,但我现在非常确信问题出在我的调试代码上
标签: c security buffer buffer-overflow shellcode