如何创建短路径的符号链接?

时间:2013-12-08 22:12:19

标签: android binaryfiles directory-structure dynamic-linking

我正在编辑某些binaries路径,而不是重新编译它们。

我想用一条相同长度的路径替换我无法创建的/lib/ld-linux-armhf.so.3,我可以创建而不需要根植电话。它应该是相同长度的东西,因为我正在编辑二进制文件。在下面列出的不同可能性之后,我选择了路径/data/data/com.clk/.so.3。我要做的是创建/data/data/com.clk/.so.3,它应该是/data/data/com.spartacusrex.spartacuside/gentoo_armv6l/lib/ld-linux-armhf.so.3的符号链接

我最初使用/proc/5781/cwd/rmhf.so.3,但其他应用程序(其他Linux帐户)无法读取。

然后我尝试了/data/.tmp,但我的手机是specific,而且根据@ChrisStratton没有记录。与/data/logcat_log相同。

/sdcard被排除在外,因为保险丝选项rw,nosuid,nodev,relatime,user_id=1015,group_id=1015,default_permissions,allow_other限制了链接和可执行文件,并且/lib/ld-linux-armhf.so.3将被执行。

有谁知道我还能做到这一点吗?

2 个答案:

答案 0 :(得分:1)

您是否考虑使用PatchELF而不是滚动自己的二进制编辑?它声称足够聪明,可以根据需要在ELF头中插入额外的页面,以便为更长的解释器或RPATH字段腾出空间。这将允许您使用真正的解释器值而不是需要符号链接。

答案 1 :(得分:0)

我终于偶然发现apk, AIDE, that can create simple apk,它不需要任何x86计算机,而且可以在手机上运行。没有支付任何东西,在二十分钟内,我创建了我的第一个apk,并能够在临时授权未知来源后安装它。这是我的第一个java程序。我为apk选择了一个简短但信息丰富的名称,com.symlicom.似乎是必要的)。

然后我修改了编辑器的标签MainActivity.java以获得:

package com.symli;

import android.app.*;
import android.os.*;

public class MainActivity extends Activity 
{
  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    try
    {
      Runtime.getRuntime().exec("ln -s /data/data/com.termux/com.symli /data/data/com.symli/n");
      Runtime.getRuntime().exec("chmod 1777 /data/data/com.symli");
    } catch (java.io.IOException e) {
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
}

然后我只需单击“运行”按钮,BOOM符号链接现在就可以了,而/data/data/com.symli本身就是一个全局可写目录(设置了粘滞位):

lrwxrwxrwx 1 10150 10150 50 Nov  3 13:17 /data/data/com.symli/n -> /data/data/com.termux/com.symli
drwxrwxrwt 4 10150 10150 4096 Nov  3  2015 /data/data/com.symli

我已将结果.apk上传到http://sf.net/projects/gentooandroid/files/symlinksForStackoverflowQuestion20459834v2.apk/download(权限:无!SHA256sum:01fd17a8700f2cb5b5bb943b38b623b1400679fa03c35ccb204619d1d5d486ff MD5sum:879af0633504ab25462a1f9b2303587e)