Ptrace kullanırken 'syscalls' formu 'int 80h' nasıl ayırt edilir


4

Bildiğim kadarıyla ptrace, yalnızca PTRACE_SYSCALL tarafından sistem çağrısı numarası alabilir, ancak sistem çağrısı numarası x86 ve x64'te farklıdır. Peki, bu sistemin gerçek nereden geldiğini bulmanın bir yolu var mı?

Şimdi başkalarının çağrı numaralarını çağrı numarasına göre sınırlandırmak için bir program yapıyorum, hem x86 hem de x64'teki çağrı numaralarını biliyorum, ancak bazı programlar tehlikeli olanı yapabilmeleri için 'sistem çağrısı' yerine 'int 80h' kullandı. X64 ile sınırladım. Örneğin, x64'teki fork () 'i yasakladım,' int 80h (2) '(fork ())' i kullanabilirler ve 'syscall (2)' (open ()) 'ı kullandıklarını düşerek limitleri kırabilirler . Her ne kadar ptrace ikisini de izleyebiliyor ve sistem çağrısı numarasını alabilse de, sistemin çağrısının gerçekte nereden geldiğini ayırt edemiyorum.

Yanıtlar:


-1

Bu sistem çağrısı sys_rt_sigtimedwait (çekirdek 2.2'den beri). Bakın manpage onun tarafından:

man 2 rt_sigtimedwait

Bu çağrı, bağımsız değişken tarafından belirtilen bir sinyal (veya bir dizi şarkı) iletilinceye kadar yürütmeyi askıya alır. Zaman aşımı süresi de verildi.

% 100 olduğundan emin olmak için bir dosya var. unistd_64.h. Sisteminizde bu dosyayı arayın. Çoğunlukla include klasöründe bulunur ( /usr/include/x86_64-linux-gnu/asm/unistd_64.h ). İçinde tanımlanmış sayılar var. İşte benim durumumdaki ilgili satır (ayrıca 64 bitlik bir sistem, çekirdeği 3.2.0-58):

#define __NR_rt_sigtimedwait                    128
__SYSCALL(__NR_rt_sigtimedwait, sys_rt_sigtimedwait)

Not 128 için ondalık 80 altıgen halinde.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.