101 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/* Part of libhgfs - (c) 2009, D.C. van Moolenbroek */
 | 
						|
#include <machine/asm.h>
 | 
						|
 | 
						|
.text
 | 
						|
 | 
						|
	MAGIC = 0x564D5868
 | 
						|
	BD_PORT = 0x5658
 | 
						|
	IO_PORT = 0x5659
 | 
						|
 | 
						|
ENTRY(__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
 | 
						|
 | 
						|
ENTRY(__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
 | 
						|
 | 
						|
ENTRY(__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
 |