> Аж ни разу. Можно статически слинковать бинарник. Можно сделать
> бинарник
> SGID'ным. Можно в .interp указать свой interpreter, который не
> обращает внимания на LD_PRELOAD.
>> По тому, что glibc их всех врапит.
> На glibc свет клином не сошелся.
От ё-моё... Цитирую вас же:
---
Работает через LD_PRELOAD, потому системные вызовы не перехватывает,
а только функци из glibc.
---
Не надо вырывать ответ из контекста и ставить для него условия,
прямо противоположные исходным.
> Что такое aoss?
Перехватывает обращения к /dev/dsp и эмулирует его поверх ALSA.
> ptrace - чтобы, в частности, сработал read
Для /proc/self/mem - не нужно бы было.
> Думаю, что это была неработающая misfeature
Говорю же вам... пользовались ей от сотворения мира. dosemu, svgalib,
возможно XFree... да мало ли кто ещё? Ничего незаменимого в
этой фишке не было, но и общего способа её заменить вроде бы тоже нет.
dosemu долго страдал без неё, но со временем перешёл на posix shm.
svgalib вообще чуть не сдох и для него в срочном порядке сделали
расширение mremap в виде флага MREMAP_FIXED, чтобы они смогли
переписать утраченную функциональность. Как другие проекты
выкручивались - не в курсе, но все это пережили.
> Скачал 2.2.26 (вроде последнее стабильное ядро ветки 2.2), нет там
> никакого mem_mmap. Такое ощущение, будто ваш зверек, которым вы
> "активно пользовались", родился в нестабильной 2.3 и там же умер:
Да фиг вам. Просто не надо скачивать последнее. Скачайте то, что
было до даты удаления этой фишки. Её удалили сразу во всех ветвях
ядра, а не только в 2.3.
Кстати, не вы ли здесь под ником rtc проходили раньше? Стиль что-то
похожь...
>Для /proc/self/mem - не нужно бы было.
С чего вы взяли, что не нужно? Берем код 2.6.18:
#define MAY_PTRACE(task) \
(task == current || \
(task->parent == current && \
(task->ptrace & PT_PTRACED) && \
(task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
security_ptrace(current,task) == 0))
static ssize_t mem_read(struct file * file, char __user * buf,
size_t count, loff_t *ppos)
{
struct task_struct *task = get_proc_task(file->f_dentry->d_inode);
char *page;
unsigned long src = *ppos;
int ret = -ESRCH;
struct mm_struct *mm;
if (!task)
goto out_no_task;
if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
goto out;
...
Совершенно очевидно, что при попытке read проверяется, читается ли
память самого себя или отлаживаемого процесса...
> Совершенно очевидно, что при попытке read проверяется, читается ли
> память самого себя или отлаживаемого процесса...
Вопрос на засыпку: /proc/self/mem - это по вашему что? Память самого
себя, или память отлаживаемого процесса?
> Вот за такое точно надо руки отрывать...
Почему, кстати? Вроде бы, просто расшаривают PTE. Ну а то, что
оно не работает для SHM и делает do_no_page() всем COW-mappings,
так это не большие проблемы.