본문 바로가기
반응형

프로그래밍/SYSTEM HACKING14

[SYSTEM HACKING] 어셈블리 분기문( compare<cmp>, jump<jmp> ) 어셈블리 분기문( compare, jump )에 대해서 정리한다. 분기문: if, switch 1. cmp: compare - 레지스터나 메모리의 값을 변경하지 않는다. - 플래그 레지스터에만 영향을 준다. - SF,CF, ZF - cmp left, right ( 문서를 통해서 참조한 EFLAGS Register의 형태이다... ) ! 두 피연산자의 비교 left - right ( SUB 명령어와 같이 빼기 연산을 하고 그 결과에 따라서 플래그에 영향을 미치게 된다.. ) 1). 결과가 0인 경우: 같은 경우 - ZF: 1, SF:0 2). 결과가 음수인 경우: right가 더 큰 경우 - ZF: 0, SF: 1 3). 결과가 양수인 경우: left가 더 큰 경우 - ZF:0, SF: 0 ( cmp 명령.. 2017. 10. 23.
[SYSTEM HACKING] 어셈블리 명령어( shift 연산<shl, shr, sal, sar>, 논리연산<and, or, not>, 형변환<movzx, movsx>) 어셈블리 명령어( shift 연산, 논리연산, 형변환)에 대해서 정리한다. 1. 컴파일 과정 2. 실행중인 프로세스의 메모리 구조 3. 어셈블리 프로그래밍: 사칙연산 --------------------------------------------- 1. 비트연산: shift 연산 1). 부호가 없는 연산 ( Logical Shift ) - 왼쪽으로 이동: shl - 오른쪽으로 이동: shr ex). eax = 4; eax al * 큰 -> 작은 크기로 이동하는 상황은 특정 명령어가 존재하지 않고 메모리나 레지스터의 해당 크기를 줄여서 그 크기 만큼의 값만 가지고 온다. 대신에 이 경우에는 상위 비트의 값을 잃게 되므로 값의 손실이 생길 수 있다!!! [실습] - 사칙연산 프로그램 작성 - 입력 최대크기는.. 2017. 10. 21.
[SYSTEM HACKING] 어셈블리 사칙연산 명령어( add, sub, mul, imul, div, idiv ) / 계산기 만들기 실습 어셈블리 사칙연산 / 계산기 만들기 실습에 대해서 정리한다. 1. 사칙연산: +, -, *, / * 어셈블리에서 나머지를 구하는 연산은 없다. 1). 덧셈: ADD ( 어셈블리에서 + 이용해서 연산을 하는 경우는 Effective Address의 주소 연산을 할 경우에 [ ] 안에서만 사용하고더하기 연산 기능은 add 명령어를 통해서 하게 된다.. ) 2). 뺄셈: SUB 3). 곱셈 - MUL( unsigned ) * 피연산자는 하나이고 곱셈을 해서 eax와 edx 레지스터에 저장한다. - IMUL( signed ) * 피연산자가 1부터 3개까지 올 수 있고 형식은 MUL과 똑같다. ( unsigned의 곱하기 연산을 할 경우에는 mul을 사용한다 ) ( signed의 경우에는 IMUL 명령어를 이용하.. 2017. 10. 20.
[SYSTEM HACKING] 명령어( mov, lea ) 명령어( mov, lea )에 대해서 정리한다. ! 데이터를 저장할 수 있는 곳 - 메모리 - 레지스터 - 코드섹션 명령어 1. mov - 할당 연산자와 비슷한 개념 - mov dst, src ! 피연산자 dst, src가 둘 모두 메모리가 올수는 없다. !! 코드섹션에서 메모리를 사용할때는 주소에 대한 메모리의 크기를 명시해준다. ( 주소에 대한 메모리의 크기를 명시해주지 않으면 nasm은 해당 주소의 크기를 data 혹은 bss 섹션에 정의해놔도 코드를 실행할때는 알지 못한다 ) * 레지스터의 크기는 이름으로 알 수 있지만 메모리는 이름으로 크기를 알 수 없다. * 코드 섹션에 mov 명령어를 사용할 때 피연산자로 레이블 이름을 그대로 적어주고 상수 값을 주는건 피연산자로 상수, 상수를 주는것과 같기.. 2017. 10. 18.
[SYSTEM HACKING] NASM ( 문자, 문자열 ) / data, bss, text segment에서의 데이터 표현 / 레지스터( Register ) NASM ( 문자, 문자열 ) / data, bss, text segment에서의 데이터 표현 / 레지스터( Register )에 대해서 정리한다. C 언어 - 문자: '(작은 따옴표) - 문자열: "(큰 따옴표) - 'hello'(x), 'h'(o) - "hello"(o), "h" NASM - 문자, 문자열: '(작은 따옴표) * 어셈블리어는 문자와 문자열을 구분하지 않는다. - 어셈블리어는 NULL 문자가 자동으로 붙지 않기 때문에 따로 붙여줘야 한다. * 이스케이프 문자가 지원되지 않는다면 ASCII 코드 값을 넣어주면 된다. ( nasm 홈페이지에 문서를 참조하면 String Constants 부분에 문자에 대한 표현 방법이 자세하게 나와있다 ) ( C언어 같은 경우에는 NULL 문자가 자동으로 .. 2017. 10. 17.
[SYSTEM HACKING] 실습 환경 세팅 / 컴파일 과정 / ELF 섹션(ELF Section) / 어셈블 프로그래밍 실습 환경 세팅 / 컴파일 과정 / ELF 섹션(ELF Section) / 어셈블 프로그래밍에 대해서 정리한다. - 실습 환경 - Red Hat Linux 6.2 * 부팅시마다 LILO BOOT에서 linux-up을 입력해줘야 한다. - 원격접속 설정 1). /etc/securetty pts/0 pts/1 pts/2 .. pts/8 * 위 내용을 해당 파일에 추가 시켜주기만 하면 다음 부팅시부터 Telnet을 이용한 원격접속이 가능하다. 2). PAM: /etc/pam.d/login - 두번째 라인을 주석 처리 - # auth required /lib/security/pam_securetty.so - 사용하는 도구 * C 컴파일러 : GCC ( GNU C Complier) * 어셈블러 : GAS( GNU.. 2017. 10. 14.