2015-06-11 18 views
10

Sto lavorando a uno strumento che a volte dirotta l'esecuzione dell'applicazione, incluso il lavoro in un altro stack.Come viene determinato il puntatore dello stack di un'attività del kernel Linux per ogni thread?

Sto cercando di ottenere che il kernel visualizzi sempre lo stack di applicazioni durante l'esecuzione di determinate chiamate di sistema, in modo che stampi il qualificatore [stack] nel posto giusto in/proc/pid/maps.

Tuttavia, la semplice modifica dell'esp attorno alla chiamata di sistema sembra non essere sufficiente. Quando uso il mio strumento su "cat/proc/self/stat" sto vedendo kstkesp (entry 29 here) a volte ha il valore che voglio ma a volte ha un valore diverso, corrispondente al mio stack alternativo.

che sto cercando di capire:

  1. Come si riflette il valore in/proc/self/stat: 29 determinato?
  2. Posso modificarlo in modo che abbia un valore appropriato in modo affidabile?
  3. Se 2 è difficile da rispondere, dove consiglieresti di cercare di capire perché il valore è intermittente non corretto?

risposta

1

Sembra che sia definito ad es. nella riga 409 di http://lxr.free-electrons.com/source/fs/proc/array.c?v=3.16 per me.

C'è un sacco di discussione circa la relativa KSTK_ESP macro nel corso degli ultimi anni per esempio: https://github.com/davet321/rpi-linux/commit/32effd19f64908551f8eff87e7975435edd16624

e

http://lists.openwall.net/linux-kernel/2015/01/04/140

Da quanto ho capito quanto riguarda la stranezza intermittente sembra un NMI o altri colpi di interrupt all'interno del kernel a volte e quindi non cammina correttamente lo stack in quel caso.

+0

Rudi, quello che intendevo è dove punta la macro KSTK_ESP, cioè dove è impostato il valore che inseriamo nella voce 29 di/proc/pid/stat, non come si accede per impostare la voce 29. I ti darò la taglia perché la mia domanda non è stata abbastanza chiara. Se è possibile modificare la risposta per includere tali informazioni, sarei grato. – nitzanms

+1

Ho paura che mi occorressero settimane di studio per darti una risposta più solida. Penso che sia un po 'specifico per l'arco poiché coinvolge il blocco di attività. Questa risposta è stata solo di un'ora o due e sono stato felice di farlo perché occasionalmente ho apportato un piccolo contributo al kernel. Scusa, non posso dirti di più. –

+0

È bello. Quello che mi hai dato è apprezzato. Certamente meglio che lasciare che tutta la reputazione vada sprecata. Farebbe la differenza se limitassi la mia domanda solo a x86 (_64)? – nitzanms

Problemi correlati