问题标签 [function-interposition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
298 浏览

macos - 如何在执行之前获取新进程的 PID?

为了让我可以使用inject_and_interpose代码进行一些注入和插入,我需要在新启动的进程(典型的闭源用户应用程序)实际执行之前获取它的 PID。

To be clear, I need to do better than just "notice it quickly"--I can't be polling, or receiving some asynchronous notification that means that the process has already been executing for a few milliseconds by the time I take action.

I need to have a chance to do my injecting and interposing before a single statement executes.

I'm open to writing a background process that gets synchronously notified when a process by a particular name comes into existence. I'm also open to writing a launcher application that in turn fires up the target application.

Any solution needs to support 64-bit code, at a minimum, under 10.5 (Leopard) through 10.8 (Mountain Lion).

In case this proves to be painfully simple, I'll go ahead and admit that I'm new to OS X :) Thanks!

0 投票
1 回答
297 浏览

c - 在结构中插入定义为函数指针的 C 函数

早上好,

是否可以使用 dyld 插入功能插入这种 C 函数? 

函数调用方式:

0 投票
1 回答
4056 浏览

linux - 如何与具有许多冲突功能的两个共享库链接

我目前正在链接 linux 上的两个第三方共享库(A.so 和 B.so)。问题是这两个so都与另一个库静态链接,因此来自A.so和B.so的大约400个函数具有相同的名称。当我使用 -lA -lB 或 -lB -lA 编译和链接时,由于函数插入导致问题并且代码无法运行,这取决于从 A 或 B 分别提取函数的顺序。我想知道是否有办法将函数名称绑定到它们的库,以便两个库都可以链接和使用?因为那些重叠的函数名称是在 A 和 B 内部调用的,所以我不能使用 objcopy 之类的东西。dlopen 有帮助吗?

0 投票
1 回答
568 浏览

c - 挂钩 C 函数

我想AudioUnitInitialize通过在应用程序启动时注入一个包来挂钩该功能以获取应用程序的音频单元。
我找到了一个示例(http://pastie.org/1882125),但它使用函数MSHookFunction来替换函数名称。问题是我想替换 Mac OS X 上的功能,而不是 iOS。
还有另一种方法来挂钩 C 函数吗?

0 投票
2 回答
1311 浏览

osx-mavericks - OSX Mavericks 上的函数插入

我完全按照本网站上的说明进行操作

http://www.newosxbook.com/src.jl?tree=listings&file=4-5-interpose.c

这是该页面的代码

最新版本的 OSX 或此处编写的代码有什么不同吗?它似乎没有拦截任何东西。

0 投票
2 回答
3417 浏览

macos - 是否可以让任意程序忽略信号?

特别是在 Mac OS X 上,是否可以通过 DYLD_INSERT_LIBRARIES 使程序忽略 SIGTERM,以适用于任何或大多数程序的方式?

我尝试编译并插入:

然而,

能够毫无问题地杀死-15。

0 投票
2 回答
13450 浏览

android - 如何挂钩我的 android 应用程序的系统调用(非 root 设备)

我正在尝试拦截我的 Android 应用在非 root 设备上进行的所有系统调用。

因此,每次我的应用程序写入/读取文件时,出于安全目的,我都想拦截系统调用并加密/解密流。加密部分没问题,但是如何拦截系统调用呢?

由于应用程序的某些部分是由第三方提供商开发的模块,我无法更改其源代码,因此没有其他方法可以确保数据安全存储。

由于我没有 root 访问权限,因此无法访问此处描述的系统调用表的地址,也无法通过 LKM 模块执行此操作。

我将不胜感激任何建议,谢谢。

编辑:

好的,我得到了 Simone Margaritelli 的代码链接,现在可以使用了!我的代码不断崩溃的原因是因为我必须设置正确的内存访问权限:

0 投票
1 回答
1629 浏览

android - 如何挂钩我的 android 应用程序的系统调用

我想拦截 connect() 系统调用并使用我自己的自定义实现。为简单起见,自定义实现将执行一些操作,例如打印日志,然后进一步调用系统实现。

我查看了Audrey 的博客,其中的方法是修补 PLT。但不幸的是,当试图更改重定位表中的地址时,这段代码会崩溃。

经过一段时间的凝视后,我遇到了这个已经回答的问题。但是这里描述的方法给了我以下错误。

*****跳转到案例标签[-fpermissive] jni/test.cpp:107:20:错误:跨过'uint32_t entry_page_start' jni/test.cpp:106:15的初始化:错误:跨过'uint32_t page_size的初始化'*****

建议更改后来自Andrey 博客的钩子调用方法Here,如下所示。

我做错了什么,我是否将 mProtect() 方法放在了错误的地方?我们有人在 Andrey 的博客的帮助下做过吗?还有其他方法吗?我被封锁了。任何帮助,将不胜感激。

0 投票
2 回答
1799 浏览

matlab - Polyfit 和 polyval 执行插值

我有

x = linspace(-5,5,256) y = 1./(1+x.^2) plot(x,y,'...') %plot of (x,y)

我想用一个 10 阶的多项式来估计这个,这样多项式在 11 个点与图形相交。

所以,我这样做了:

x2 = linspace(-5,5,11) y2 = 1./(1+x2.^2) p = polyfit(x2,y2,10) %finds coefficients of polynomial of degree 10 that fits x2,y2 y3 = polyval(p,x2) plot(x,y,x2,y3,'...')

我认为 polyfit 会给我一个高达 10 阶的多项式的系数,它与点相交(x2,y2)(即 11 个点)然后y3基本上只是y10 阶多项式所在位置的值,因此将它们完全绘制会给我 10 阶多项式,在 11 个独特点处与我的原始图相交?

我做错了什么?

我的结果:在此处输入图像描述

0 投票
1 回答
1218 浏览

c - 标准 C 和 C++ 库中的 malloc 函数插入

我想以这样一种方式编写一个共享库,以便可以将它的内存使用与它所链接的应用程序隔离开来。也就是说,如果共享库,让我们称之为libmemory.so,调用malloc,我想将该内存维护在一个单独的堆中,而不是用于为malloc应用程序中的调用提供服务的堆。这个问题不是关于编写内存分配器,而是关于将库和应用程序链接和加载在一起。

到目前为止,我一直在尝试函数插入、符号可见性和链接技巧的组合。到目前为止,由于一件事,我无法做到这一点:标准库。我找不到一种方法来区分对内部使用的标准库的调用malloclibmemory.so应用程序的调用。这会导致一个问题,因为此后任何标准库的使用都会libmemory.so污染应用程序堆。

我目前的策略是将malloc共享库中的定义插入为隐藏符号。这工作得很好,所有库代码都按预期工作,当然,在运行时动态加载的标准库除外。自然,我一直在尝试找到一种静态嵌入标准库用法的方法,以便它在编译时使用插入malloc的 in 。libmemory.so我已经尝试过-static-libgcc-static-libstdc++没有成功(无论如何,这似乎是不鼓励的)。这是正确的答案吗?

做什么?

Ps,进一步阅读总是值得赞赏的,并且在问题标记前面的帮助会很好。