相关疑难解决方法(0)

覆盖C中的函数调用

我想为了记录调用而覆盖对各种API的某些函数调用,但我也可能希望在将数据发送到实际函数之前对其进行操作.

例如,假设我getObjectName在源代码中使用了一个名为数千次的函数.我想暂时覆盖此函数,因为我想更改此函数的行为以查看不同的结果.

我创建了一个像这样的新源文件:

#include <apiheader.h>    

const char *getObjectName (object *anObject)
{
    if (anObject == NULL)
        return "(null)";
    else
        return "name should be here";
}
Run Code Online (Sandbox Code Playgroud)

我像往常一样编译所有其他源代码,但是在链接API的库之前我首先将它链接到此函数.这工作正常,但我显然不能在我的重写函数中调用真正的函数.

是否有一种更简单的方法来"覆盖"一个函数而不会链接/编译错误/警告?理想情况下,我希望能够通过编译和链接一个或多个额外的文件来覆盖该函数,而不是通过链接选项或改变我的程序的实际源代码.

c linker overriding function

68
推荐指数
7
解决办法
9万
查看次数

是否可以使用operator new来从堆以外的地方分配?

以下是我的应用程序的上下文:我正在使用嵌入式系统,该系统使用来自不同设备的RAM.微控制器内部RAM(128kB)中的一部分是外部RAM(1MB).这些存储器映射到微控制器的地址空间,但是在非连续区域中.

内部RAM用于系统堆栈,任务堆栈和堆.外部RAM用于静态分配的数据(池,缓冲区和所有" static ..."内容)

我正在尝试实现一个简单的内存管理结构,并且作为其中的一部分能够创建一个分配器,它可以使用分配算法,operator new但使用另一个内存源,而不是系统堆,而是其他地方的内存区域.你知道这是否可行?

使用的一个示例可以是保留100kB的外部RAM并创建一个分配器来管理它,然后将其分配给需要该内存的指定任务.

static const uint8_t* ramBase = reinterpret_cast<uint8_t*>(0x80000000);
static const uint32_t ramAreaSize = 0x19000; //100kB
BufferAllocator allocator(ramBase, ramAreaSize);

//...
//Assuming operator new is overloaded to use BufferAllocator
MyObject * obj = new (allocator) MyObject(some, parameter);
//...
Run Code Online (Sandbox Code Playgroud)

问题是:如何(如果这是可能的话)我可以实现BufferAllocator以便operator new用来管理原始内存区域?

void* BufferAllocator::allocate(uint32_t bytes)
{
    //I would like to write something like this
    //and so let the responsibility to manage this memory area to "new"
    //so I don't have to reimplement …
Run Code Online (Sandbox Code Playgroud)

c++ embedded memory-management

5
推荐指数
1
解决办法
606
查看次数

如何替换目标文件中的符号

我想重写目标文件,以便将大多数函数的地址更改为无操作函数。我怎样才能做到这一点?

更多上下文:在 C++ 中,我想默认自动模拟所有函数。从打电话a()a() {}打电话b()b() {}真正a()打电话replacement() {}b()也打电话(相同)replacement() {}

到目前为止我考虑过的事情:

  • objcopy --redefine-syms=filename- 这改变了符号的名称,而不是它的地址。
  • 使用链接器的--wrap参数 - 这需要__wrap_NameOfWrappedThing为我想要包装的每个东西编译一个不同的符号,并且通常看起来它不能很好地缩放。

c++ linux linker ld object-files

5
推荐指数
0
解决办法
2012
查看次数

标签 统计

c++ ×2

linker ×2

c ×1

embedded ×1

function ×1

ld ×1

linux ×1

memory-management ×1

object-files ×1

overriding ×1