segunda-feira, 13 de abril de 2020

Truque : Executar C/M com funções

Recentemente vi um truque interessante que gostava de partilhar convosco.

Definindo uma função:

DEF FN N(x)=USR (4+PEEK 23563+256*PEEK 23564)

Executa-se código máquina definido "em cima do joelho", ao invocar a função.

RANDOMIZE FN N(51699): REM Disable Interrupts
RANDOMIZE FN N(51707): REM Enable Interrupts

O que acontece é que a função define que vai invocar o endereço apontado pela word em 23563, que é o endereço do buffer usado por DEF FN/FN. O número com que o invocam é colocado nessa posição de memória, sendo que a representação BASIC do inteiro corresponde à instruções código máquina Z80:

Senão vejamos:

51699

00             NOP
00             NOP
F3             DI
C9             RET
00             NOP

51707

00             NOP
00             NOP
FB             EI
C9             RET
00             NOP

Portanto, ao definir um número, efectivamente estamos a codificar um "programa" a ser executado.

Sem comentários:

Publicar um comentário