gpt4 book ai didi

c - C 中的低级函数调用?

转载 作者:行者123 更新时间:2023-11-30 15:26:47 26 4
gpt4 key购买 nike

假设我们有一个位于已知地址的函数func。我们不知道该函数需要多少个参数或哪种数据类型。

我们得到一个数组,其中包含与函数期望的正确字节数相对应的数据。例如,假设我们有函数 func(uint8_t a, uint16_t b, uint8_t c),数组将为 0x0A, 0x0B, 0x0C, 0x0D 其中 0x0Aa 的值,0x0B0Cb 的值,0x0Dc.

给定这个数组和函数的地址,如何在 C 语言或内联汇编中调用该函数?

编辑:我还应该提到此代码将在 ARM 处理器上运行。

最佳答案

如果不知道函数调用约定,就无法做到这一点。您不能只是将数据转储到堆栈中并期望您的函数来处理它。如果它是一个__cdecl函数,则必须在执行后清除堆栈,否则会损坏它。如果它是 __fastcall 函数,则它需要 ecx/rcx 和 edx/rdx 寄存器中的前两个参数。 (这也与平台相关!)如果它是 __thiscall,则必须通过 ecx 寄存器(也与平台相关)提供指向对象实例的指针。

编辑:根据Procedure Call Standard for the ARM architecture ,参数可以通过堆栈和寄存器传递(第 18、30 页)。所以上面写的所有内容仍然适用。

关于c - C 中的低级函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27285487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com