【发布时间】:2021-11-06 11:46:04
【问题描述】:
在 Visual Studio 中运行此程序时,当程序到达 memcpy 函数时,我收到“访问冲突”错误。无论我制作这个缓冲区的大小,它总是会抛出这个读取访问冲突错误。我在 memcpy 函数上设置了断点,一旦我继续执行,它就会抛出这个错误:
char data[DATA_SIZE] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
#define DATA_SIZE 27136
void spawn(void * buffer, int length, char * key);
typedef struct {
int offset;
int length;
char key[4];
int gmh_offset;
int gpa_offset;
char payload[DATA_SIZE];
} phear;
extern char data[DATA_SIZE];
void start(HINSTANCE mhandle) {
phear * payload = (phear *)data;
char * buffer;
buffer = (char *)malloc(payload->length);
memcpy(buffer, payload->payload, payload->length);
/* execute our code */
spawn(buffer, payload->length, payload->key);
/* clean up after ourselves */
free(buffer);
}
【问题讨论】:
-
出错时访问的是哪个指针?源头还是目的地?
payload->length的值是多少?例如,它是否大于DATA_SIZE?data是否以某种方式无效?也就是说,需要更多的调试数据。 -
(phear *)data;为什么会有pheardata?至少,data与phear没有对齐。 -
data不是phear,也不能这样对待。除了对齐问题,它明显小于实际的phear。停止使用类型转换。他们不需要这样做,并且他们允许错误。如果您需要phear,则声明phear,而不是char数组。 -
扩展 Tom 的评论,执行:
phear data;和extern phear data;并消除演员表
标签: c memory malloc memcpy shellcode