Как создать символическую ссылку с коротким полным путем?

Я редактирую пути на некоторых двоичных файлах, не перекомпилируя их.

Я хочу заменить /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, но это специфический для моего телефона и не документирован в соответствии с @ChrisStratton. То же о /data/logcat_log.

/sdcard исключается из-за того, что параметры плавкого предохранителя rw,nosuid,nodev,relatime,user_id=1015,group_id=1015,default_permissions,allow_other ограничивают ссылки и exectuables и /lib/ld-linux-armhf.so.3.

Кто-нибудь знает, как еще я могу это сделать?

Ответ 1

Я, наконец, наткнулся на apk maker, который не нуждается в компьютере x86 и работает на самом телефоне. Не платя ничего, через двадцать минут я создал свой первый apk и смог установить его после временного авторизации неизвестных источников. Это была моя первая java-программа. Я выбрал короткое, хотя и информативное имя для apk, com.symli (com. казалось необходимым).

Затем я изменил вкладку 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.spartacusrex.spartacuside/com.symli /data/data/com.symli/n ; env > /data/data/com.symli/getRuntimeExecEnv");
    } catch (java.io.IOException e) {
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
}

Затем я просто нажал кнопку "Запуск", и BOOM символическая ссылка теперь здесь хорошо:

lrwxrwxrwx 1 10150 10150 50 Nov  3 13:17 /data/data/com.symli/n -> /data/data/com.spartacusrex.spartacuside/com.symli

Часть env не работала, но мне все равно. Я загрузил полученный .apk в http://sf.net/projects/gentooandroid/files/symlinksForStackoverflowQuestion20459834.apk (разрешения: NONE! SHA256sum: 63dcc7553ae5f033ec81ff535fa4648665753675663af0e9f37f02eecdc945b6 MD5sum: a269ebdfeb1f08d0c632947a30f2764d)

Ответ 2

Рассматривали ли вы использование PatchELF вместо того, чтобы переводить собственное бинарное редактирование? Он утверждает, что достаточно умен, чтобы вставить дополнительную страницу в заголовок ELF по мере необходимости, чтобы освободить место для более длинных интерпретаторов или полей RPATH. Это позволит вам использовать значение реального интерпретатора, а не символическую ссылку.