Можем ли мы прочитать счетчик программ другого потока?
предположим, что у нас есть программа с одним потоком, и мы надеемся захватить значение счетчика программ (PC), когда происходит предопределенное прерывание (например, прерывание таймера).
Это кажется простым, как вы знаете, мы просто пишем определенный ассемблерный код, используя специальное ключевое слово " _ _ asm__", и помещаем значение в верхнюю часть стека после сдвига на 4 байта.
А как насчет многопоточных программ ?
Как мы можем получить значения всех потоков из другого потока, который выполняется в том же процессе? (Кажется крайне невероятным получать значения из потока, который работает на отдельном ядре в многоядерных процессорах).
(в многопоточных программах каждый поток имеет свой стек и регистры тоже).
-------------------------------------
I would implement a saboteur thread. in order to perform fault injection in the target multi-threaded program, the model of fault is SEU (single error upset) which means that an arbitrary bit in the program counter register modified randomly (bit-flip) causing to violate the right program sequence. therefore, control flow error (CFE) occurs. Since our target program is a multi-threaded program, we have to perform fault injection on all threads' PC. This is the task of saboteur tread. It should be able to obtain threads' PC to perform fault injection. assume we have this code, main () { foo } void foo() { __asm__{ pop "%eax" pop "%ebx" // now ebx holds porgram counter value (for main thread) // her code injection like 00000111 XOR ebx for example push ... push ... }; } If our program was a multithreaded program. is it means that we have more than one stack? when OS perform context switching, it means that the stack and registers of the thread that was running moved to some place in the memory. Does this mean that if we want to get the values of the program counter for those threads, we find them in memory? where? and is it possible during run-time?
любая помощь, я Вам благодарен.
Что я уже пробовал:
используя _ _ asm__, мы можем получить значение PC основного потока.