我想在main中对当前堆栈进行校验和,以检查它是否在两点之间被改变.
例如:
int main(void) {
...
stack_checksum();
... process ...
if(stack_checksum() != ...)
altered.
}
Run Code Online (Sandbox Code Playgroud)
如何获取基本堆栈地址和堆栈顶部的当前地址?
编辑: 随着@MiroslavBajtoš帮助,步骤方法:
这取决于您使用的标准库的编译器/实现.
对于gcc(或使用glibc的任何其他编译器),您可以使用backtrace()
函数execinfo.h
- 请参阅这些答案以获取更多详细信息:如何在我的gcc C++应用程序崩溃时生成堆栈跟踪以及如何获取更详细的回溯
对于Microsoft编译器,您可以使用StackWalk64()
函数,有关详细信息,请参阅此文章:Walking-the-callstack.在StackOverflow上也有类似的问题:Windows上的StackWalk64 - 获取符号名称
一旦你可以走栈,计算校验和应该很容易.
归档时间: |
|
查看次数: |
246 次 |
最近记录: |