추가된 함수와 변수 |
typedef struct _cmdmap { 해당하는 함수를 호출 해주는 역할을 하는 함수 */ |
무한루프를 출력하는 어셈블리 소스 |
.386
.MODEL FLAT
PUBLIC _STST
PUBLIC _LDST
.CODE
_STST PROC NEAR32
PUSH EBP
MOV EBP, ESP
PUSHFD ; EFL 임시저장
MOV EAX, [EBP-4] ; EFL이 변형되기 때문에
AND EAX, 0FFFFFEFFH ; TF(Trap Flag) 제거
MOV [EBP-4], EAX
MOV ESP, [EBP+8] ; ESP를 _EAX 위치로 이동
ADD ESP, 40
PUSHAD ; 레지스터 값들 push
PUSH [EBP+4] ; push EIP(return address)
PUSH [EBP-4] ; push EFL
ADD ESP, 24 ; _ESP 위치로 가서
MOV EAX, EBP
ADD EAX, 8 ; EBP로 부터 ESP를 찾아서
PUSH EAX ; old ESP-4 push
PUSH [EBP] ; old EBP push
MOV ESP, EBP ; Exit code
POP EBP
RET
_STST ENDP
; 메모리 정보를 cpu 레지스터로 이동
_LDST PROC NEAR32
MOV ESP, [ESP+4] ; ESP = &CONTEXT
POPFD ; EFL CPU로 : EFL = CONTEXT.EFL
POP EAX ; EIP BACK UP : OLD EIP
MOV EBX, ESP ; TEMP = CURRENT ESP
MOV ESP, [ESP+12] ; ESP = OLD ESP
PUSH EAX ; RETURN ADDR 조작(EIP) : SAVE OLD EIP
MOV ESP, EBX ; ESP = CURRENT ESP
POP EDI
POP ESI
POP EBP
ADD ESP, 4 ; skip ESP
POP EBX
POP EDX
POP ECX
POP EAX
MOV ESP, [ESP-20] ; RETURN ADDR 지정
SUB ESP, 4
RET
_LDST ENDP
|
위의 어셈블리 함수를 호출하여 사용하는 c언어 소스 |
|
#include <stdio.h>
typedef struct _context { int efl; int eip; int edi; int esi; int ebp; int esp; int ebx; int edx; int ecx; int eax; }CONTEXT; void print_reg(CONTEXT *stpReg); void STST(CONTEXT *); void LDST(CONTEXT *); int main(void) { CONTEXT stReg = {0,}; printf("************************ Before ***************************\n"); print_reg(&stReg); STST(&stReg);
printf("************************ After ****************************\n"); print_reg(&stReg); getchar(); LDST(&stReg); printf("Kernel Panic\n");
return 0; } void print_reg(CONTEXT *stpReg) { printf("EAX VALUE : 0x%08X\tECX VALUE : 0x%08X\n", stpReg->eax, stpReg->ecx); printf("EDX VALUE : 0x%08X\tEBX VALUE : 0x%08X\n", stpReg->edx, stpReg->ebx); printf("ESP ADDR VALUE : 0x%08X\tEBP ADDR VALUE : 0x%08X\n", stpReg->esp, stpReg->ebp); printf("ESI ADDR VALUE : 0x%08X\tEDI ADDR VALUE : 0x%08X\n", stpReg->esi, stpReg->edi); printf("EIP ADDR VALUE : 0x%08X\tEFL ADDR VALUE : 0x%08X\n\n", stpReg->eip, stpReg->efl); } |
'코스웨어 > 13년 스마트컨트롤러' 카테고리의 다른 글
9월 25일 어셈블리 - 석주원 (0) | 2013.09.25 |
---|---|
2013.09.25 어셈블리_이수현 (0) | 2013.09.25 |
130925수 어셈블리 숙제 조유진 (0) | 2013.09.25 |
20130924 USART 소스 _ 손초롱 (0) | 2013.09.25 |
20130924 어셈블리 pushad - 손초롱 (0) | 2013.09.24 |
CONTEXT 프로젝트(2) POPAD -0924 임기준 (0) | 2013.09.24 |
STST, LDST context switching 프로그램 만들기 (0) | 2013.09.24 |
2013.09.24_ Assambly 소스 _ 김성엽 (0) | 2013.09.24 |