Android 用特定值填充所有可用堆栈
我需要用特定的字符填充所有可用的堆栈空间,以便进行分析Android 用特定值填充所有可用堆栈,android,c++,arm,Android,C++,Arm,我需要用特定的字符填充所有可用的堆栈空间,以便进行分析 首先,在Android上有一个安全的方法(C++中可能有一些编译器特定的功能)吗?如果不是,我可以假设函数中声明的第一个变量的地址是“未使用”堆栈的“开始”吗?如果没有办法获取当前堆栈指针,比如x86上的ESP值?使用ARM,您需要考虑调用约定,因为具有四个以上参数的函数会将它们溢出到堆栈中。我发现使用起来更安全 使用ARM时,您需要考虑调用约定,因为一个具有四个以上参数的函数会将它们溢出到堆栈中。我发现使用起来更安全 事实上,在看了我的文
首先,在Android上有一个安全的方法(C++中可能有一些编译器特定的功能)吗?如果不是,我可以假设函数中声明的第一个变量的地址是“未使用”堆栈的“开始”吗?如果没有办法获取当前堆栈指针,比如x86上的ESP值?使用ARM,您需要考虑调用约定,因为具有四个以上参数的函数会将它们溢出到堆栈中。我发现使用起来更安全
使用ARM时,您需要考虑调用约定,因为一个具有四个以上参数的函数会将它们溢出到堆栈中。我发现使用起来更安全
事实上,在看了我的文章后,我想这对你的问题有一个答案。你需要澄清你所说的所有可用堆栈空间是什么意思?根据某些特定功能,所有功能?所有程序空间?多线程?更一般地说@auselen在入口点函数中创建新线程时,我想用特殊值填充所有堆栈,以便以后能够检测堆栈的使用量。是否检查了堆栈保护器的内容?GCC也有一个选项:)
-fstack usage
,但我希望您能想象,在运行时计算堆栈的总使用量是很困难的。事实上,在仔细研究之后,我发现,对于您的确切问题,我有一个答案。您需要澄清所有可用堆栈空间是什么意思?根据某些特定功能,所有功能?所有程序空间?多线程?更一般地说@auselen在入口点函数中创建新线程时,我想用特殊值填充所有堆栈,以便以后能够检测堆栈的使用量。是否检查了堆栈保护器的内容?GCC也有一个选项:)-fstack usage
,但我希望您可以想象,在运行时很难计算堆栈的总使用量。不幸的是,Android无法使用此函数:|@Felics这是一个内置的GCC函数,它也应该在NDK工具链中。顺便说一句,我刚刚验证了它与NDKR9B一起工作。在Android(arm-linux-AndroidABI-4.6工具链)上,它不见了…@Felics不可能。你能发布错误消息吗?我是Soooo noob:)我在函数名中有一个。谢谢不幸的是,这个函数不适用于Android:|@Felics这是一个内置的GCC函数,它也应该在NDK工具链中。顺便说一句,我刚刚验证了它与NDKR9B一起工作。在Android(arm-linux-AndroidABI-4.6工具链)上,它不见了…@Felics不可能。你能发布错误消息吗?我是Soooo noob:)我在函数名中有一个。谢谢
Built-in Function: void * __builtin_frame_address (unsigned int level)