当我使用静态分析查看 Ida 时,我看到缓冲区传递给函数/函数填充缓冲区中的数据。
我怎么知道这个缓冲区是否在堆栈/堆中分配?
当我使用静态分析查看 Ida 时,我看到缓冲区传递给函数/函数填充缓冲区中的数据。
我怎么知道这个缓冲区是否在堆栈/堆中分配?
如果它的地址高于或等于堆栈指针(esp/rsp),则它在堆栈上,
否则,它在堆上或在前一个堆栈帧上(现在超出范围,不应使用)
如果您想知道但只是查看地址:如果地址以 开头0x7f,则它在堆栈中。
但这可能并不总是正确的,程序可以控制堆栈指针的值并可以决定更改它(不太可能但可行)
如果您想静态查找,则必须检查函数的调用站点并查看缓冲区参数的来源。
您可能必须返回多个层,直到您清楚地看到它在堆栈上(如果传入本地内存区域的地址),或者它来自像VirtualAlloc, malloc, new, 之类的调用HeapAlloc(VirtualAlloc 和 HeapAlloc 是 Windows 特定的 API) ),在这种情况下,内存位于堆上。