【问题标题】:Call function by known address? C++ [duplicate]通过已知地址调用函数? C++ [重复]
【发布时间】:2017-10-29 21:58:17
【问题描述】:

我在一个已知的内存地址有一个函数(例如:0x11111111)。该函数返回一个 int,并将 uint32_t 指针作为其唯一参数。

如何使用 c++ 调用此函数?我见过一些通过地址调用函数的例子,但我似乎找不到一个以指针作为参数的例子

编辑:我看到了。没有说明如何调用将指针作为参数的函数

【问题讨论】:

  • 使用函数指针。
  • 我看到了。没有说明如何调用将指针作为参数的函数
  • 我不明白这有什么不同。随意编辑以解释它是如何工作的。
  • 不建议这样做。简单地说,如果您是负责在低级别分配内存(选择地址...)的人,那么就像在汇编等低级别语言中一样,这是一个好主意。
  • 为什么将指针作为参数会有什么不同?您以相同的方式调用它,但不是没有参数,而是将指针作为参数传递给它。

标签: c++


【解决方案1】:

如果你确定那里有一个函数,你可以通过将地址转换为适当类型的函数指针来调用它,然后调用它。这是执行此操作的 C 代码:

typedef int (*FunctionType)(uint32_t*);

FunctionType function = (FunctionType)0x11111111;
function(arg);

这可以轻松修改以支持任意数量的函数参数和您想要的任何返回类型。只需调整 FunctionType typedef 的参数类型列表。

或者,在一行中(gulp):

(((int (*)(uint32_t *)) 0x11111111)(arg);

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多