107 lines
1.7 KiB
ArmAsm
107 lines
1.7 KiB
ArmAsm
|
# Part of libhgfs - (c) 2009, D.C. van Moolenbroek
|
||
|
|
||
|
.globl __libhgfs_backdoor
|
||
|
.globl __libhgfs_backdoor_in
|
||
|
.globl __libhgfs_backdoor_out
|
||
|
|
||
|
.text
|
||
|
|
||
|
MAGIC = 0x564D5868
|
||
|
BD_PORT = 0x5658
|
||
|
IO_PORT = 0x5659
|
||
|
|
||
|
.balign 16
|
||
|
__libhgfs_backdoor:
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
pushl %ebp
|
||
|
movl 4+16(%esp), %ebp
|
||
|
movl $MAGIC, %eax
|
||
|
movl 4(%ebp), %ebx
|
||
|
movl 8(%ebp), %ecx
|
||
|
movl 12(%ebp), %edx
|
||
|
movw $BD_PORT, %dx
|
||
|
movl 16(%ebp), %esi
|
||
|
movl 20(%ebp), %edi
|
||
|
inl %dx
|
||
|
movl %eax, (%ebp)
|
||
|
movl %ebx, 4(%ebp)
|
||
|
movl %ecx, 8(%ebp)
|
||
|
movl %edx, 12(%ebp)
|
||
|
movl %esi, 16(%ebp)
|
||
|
movl %edi, 20(%ebp)
|
||
|
popl %ebp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
ret
|
||
|
|
||
|
.balign 16
|
||
|
__libhgfs_backdoor_in:
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
pushl %ebp
|
||
|
movl 4+16(%esp), %eax
|
||
|
movl 4(%eax), %ebx
|
||
|
movl 8(%eax), %ecx
|
||
|
movl 12(%eax), %edx
|
||
|
movw $IO_PORT, %dx
|
||
|
movl 16(%eax), %esi
|
||
|
movl 20(%eax), %edi
|
||
|
movl 24(%eax), %ebp
|
||
|
movl $MAGIC, %eax
|
||
|
cld
|
||
|
repe; insb
|
||
|
pushl %eax
|
||
|
movl 4+20(%esp), %eax
|
||
|
movl %ebx, 4(%eax)
|
||
|
movl %ecx, 8(%eax)
|
||
|
movl %edx, 12(%eax)
|
||
|
movl %esi, 16(%eax)
|
||
|
movl %edi, 20(%eax)
|
||
|
movl %ebp, 24(%eax)
|
||
|
popl %ebx
|
||
|
movl %ebx, (%eax)
|
||
|
movl (%eax), %eax
|
||
|
popl %ebp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
ret
|
||
|
|
||
|
.balign 16
|
||
|
__libhgfs_backdoor_out:
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
pushl %ebp
|
||
|
movl 4+16(%esp), %eax
|
||
|
movl 4(%eax), %ebx
|
||
|
movl 8(%eax), %ecx
|
||
|
movl 12(%eax), %edx
|
||
|
movw $IO_PORT, %dx
|
||
|
movl 16(%eax), %esi
|
||
|
movl 20(%eax), %edi
|
||
|
movl 24(%eax), %ebp
|
||
|
movl $MAGIC, %eax
|
||
|
cld
|
||
|
repe; outsb
|
||
|
pushl %eax
|
||
|
movl 4+20(%esp), %eax
|
||
|
movl %ebx, 4(%eax)
|
||
|
movl %ecx, 8(%eax)
|
||
|
movl %edx, 12(%eax)
|
||
|
movl %esi, 16(%eax)
|
||
|
movl %edi, 20(%eax)
|
||
|
movl %ebp, 24(%eax)
|
||
|
popl %ebx
|
||
|
movl %ebx, (%eax)
|
||
|
movl (%eax), %eax
|
||
|
popl %ebp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
ret
|