ArchieIl: A jak planujesz wykrywać i patchować kod samomodyfikujący się? Ot takie proste:
src equ *+1
lda *
dst equ *+1
sta *
inc src
bne *+5
inc src+1
inc dst
bne *+5
inc dst+1
To oczywiście najprostszy przypadek - zdarzają się nieco bardziej zagmatwane (xxl chyba ma najwięcej doświadczenia z racji prac nad emulatorem zx).
edit: Czy też może sensowniejszy przykład:
lda dosvec
sta restl
lda dosvec+1
sta resth
...
restl equ *+1
lda #<*
sta dosvec
resth equ *+1
lda #>*
sta dosvec+1
Albo wektory nadpisywane/modyfikowane na przerwaniach dli lub vblk?
W sumie mając system wielozadaniowy z wywłaszczaniem procesów można by było zrobić proces systemowy zajmujący się tylko patchowaniem pozostałych procesów w locie. Ale wydaje mi się, że zarżniesz w ten sposób system operacyjny. Można sobie wyobrazić, że w ten sposób mógłby działać antywirus, ale żaden do tej pory tego nie robi, bo każda wirtualizacja/emulacja będzie wolniejsza, niż realizacja programu w realtime. W efekcie Twoje patchowanie nie będzie działać do końca poprawnie (bo będzie się ścigać z analizowanym procesem), albo jeśli wyhamujesz procesy użytkownika okaże się, że Twój OS w zasadzie będzie służył do analizy procesów użytkownika, zamiast do ich jak najszybszego wykonania, co chyba nieco mija się z celem.
Patchowanie przed uruchomieniem procesu (np. podczas ładowania z dysku) nie załatwi Ci dynamicznych modyfikacji kodu chyba, że znajdziesz w programie wszystkie sekwencje modyfikujące dynamicznie kod i je "naprawisz" nie zaburzając funkcji programu. A potem wyszukasz sekwencje, które korzystały z poprawionego przez Ciebie kodu i je znowu "naprawisz" i tak w nieskończoność. Można się umówić oczywiście, że takie działania są już bardzo hakerskie i raczej żaden rozsądny program nie będzie tego robił albo, że przeanalizujemy tak kod do 3 zagnieżdżeń - ale nie osiągniemy w takim razie 100% pewności. Ale może na 100% pewności nam nie zależy, a jedynie na tym, żeby działało powiedzmy 90% programów.
Jeśli masz inny pomysł na to patchowanie to chętnie posłucham.