부산IT학원/스마트컨트롤러
-
20140818 (Assembly CDECL, STDCALL, PE구조)부산IT학원/스마트컨트롤러 2014. 8. 18. 15:35
121일차 ---------------Assembly--------------- ------- CDECL & STDCALL 방식 CDECL , STDCALL 방식은 함수 호출 후 인수를 정리하는 방식으로호출한 곳에서 인수를 정리하면 CDECL 방식, 호출당한 곳에서 인수를 정리하면 STDCALL 방식이다. --- CDECL 방식 예제코드 aaa() 함수를 호출한 main() 함수에서 add esp , 8 로 인수를 정리하고 있다. --- STDCALL 방식 예제코드 호출당한 aaa() 함수에서 마지막에 ret 8 로 인수를 정리하고 있다. 위의 소스에서 확인할 수 있듯이 __stdcall을 붙이면 STDCALL 방식으로 되고생략 시 CDECL 방식으로 작성된다. STDCALL 방식이 1byte 더 아낄 ..
-
20140805 (Assembly 함수 return 값, 인수)부산IT학원/스마트컨트롤러 2014. 8. 5. 16:19
117일차 ---------------Assembly--------------- ------- Procedure --- return 비교 --- 지역 변수 선언 중복이 되므로 중복을 최대한 피해야 최적화 할 수 있다. ESP가 88 byte만큼 움직인다. 즉, 88 byte 만큼 확보. 그런데 이상한게 int a, a0 ~ a9 까지 11개 44 byte.int b[10] 은 40 byte 합 84 byte가 나와야 하는데 88 byte 이다. 확인한 결과 [2] -> [3]으로 바뀔 때 4 byte를 더 할당 받는다. 이유는 모르겠다. --- 함수 호출시 인수 값을 바꾸는 asm 코드 예제 1) iNum이란 초기화 되지 않은 변수를smart 함수에 인수로 넣으면초기화 시켜주는 소스. - C 소스 - C..
-
20140804 (Assembly procedure(함수 구현), call, ret, 지역변수, Entry Code, Exit Code)부산IT학원/스마트컨트롤러 2014. 8. 4. 09:55
116일차 ---------------Assembly--------------- ------- Procedure and Function 보통 void 형 함수를 Procedure(프로시저)라 부르고return 값이 있는 함수는 Function이라 부르는데굳이 구별하는 언어도 있고 하지 않는 언어도 있다. --- 아래 예제 소스를 통해 함수 구현. ------- call Instruction 함수 호출, EIP를 Intel 에서는 건들 수 없지만간접적으로 조작하는 명령어가 몇 가지 있는데call 이 그 중 하나이다. call 의 실행 순서1. push eip2. mov eip , 함수 주소 near 은 32 bit 주소 체계far 은 64? bit 주소 체계 relative 는 현재로 부터 얼마나 떨어졌는..
-
20140801 (Assembly push, pop, pushad, popad, pushfd, popfd)부산IT학원/스마트컨트롤러 2014. 8. 1. 12:13
115일차 -------------Assembly------------- ------- Stack 영역 ESP Reg가 Stack영역의 주소를 갖고 있다.Stack 영역은 높은 주소에서 낮은 주소로 움직인다. ------- push Instruction stack 영역에 값을 넣는 명령어 push [저장할 값] - push 100이 명령어가 실행되는 과정.1. ESP = ESP - 4;2. *ESP = 100; 예제) Stack은 메모리 영역이기에 little endian이라서값이 거꾸로 들어간다.차례대로 들어갔다.(0x0012FFC0 인지 주소를 어떻게 알았냐면은ESP에 값을 확인하면 된다.) 1 byte로는 들어가지 않고 4 byte로 들어간다. 부호에 맞게 남는 값이 채워져 들어갔다.2 byte는 ..
-
20140731 (Assembly loop, 배열, lea, pipe line)부산IT학원/스마트컨트롤러 2014. 7. 31. 10:24
114일차 --------------Assembly-------------- ------- Conditional Jump Instruction 종류 --- 숫자 맞추기 게임을 통한 Assembly 예제 소스 ------- loop Instruction 반복문점프문과 비슷하나 일정 반복에 더 강점을 갖고 있다.점프 범위는 -128 ~ 127 byte 이다. 이런식으로 사용한다. ECX Reg와 관련이 있다. (EAX, EDX는 계산 관련, EBX는 주소 관련 Reg이다.) ECX의 값이 0이 될 때까지 계속 돈다. --- 배열 지금까지 소스에서 문자열 배열을 가끔 봐 왔고 숫자 배열도 문자열 배열과 마찬가지로 선언한다. ArrayDWORD10 DUP (?) C => int Array[10]; 이렇게 사용한..
-
20140730 (rounding factor, adc, sbb, clc, stc, cmc, jmp, cmp)부산IT학원/스마트컨트롤러 2014. 7. 30. 10:47
113일차 -----------------Assembly----------------- ------- rounding factor 라운딩 팩터 섭씨를 화씨로 변환하는 프로그램인데변환 공식이 F = (9 / 5) * C + 32 이다.그런데 소스 중에 빨간 줄이 쳐진 곳을 보면 2를 더한다.왜 2 를 더할까? rounding factor라고 하는데9 / 5 = 1.8 이다.정수간에 연산이기에 소수점 아래는 다 버리게 된다.그래서 반올림 하여 2로 만들어 주어서 차이가 적게 만드려고 한다.(9 + 2) / 5 = 2.2 로 2에 가깝게 만들어 주었다. 2 / 5 = 0.4 로 소수점 어떤 값에 0.4를 더해주게 되면반올림된 값으로 쳐줄 수 있다. 그래서 정수 계산에서 2를 더해준다. ------- adc ,..
-
20140729 (Assembly imul, idiv, div, cbw, cwd, cdq, cwde, movsx, movzx)부산IT학원/스마트컨트롤러 2014. 7. 29. 15:58
112일차 --------------Assembly-------------- ------- imul Instruction 부호 있는 곱셈flags는 CF, OF만 사용하고 함께 set된다.3가지가 있다. --- 1. imul source eax, ax, al의 값과 operand 값과 연산을 하고연산된 값은 edx:eax, dx:ax, ax에 저장된다. --- 2. imul Reg, source 위와 좀 다른데operand1 과 operand2와 연산하여operand1 에 저장한다.넘는 값은 짤리고 CF, OF가 set 됨 --- 3. imul Reg, source, immediate 이것도 좀 다른데source 와 immediate 를 연산하여Destination에 저장한다.넘는 값은 짤리고 CF, O..
-
20140728 (add, sub, inc, dec, neg, mul)부산IT학원/스마트컨트롤러 2014. 7. 28. 10:05
111일차 ------------------Assembly------------------ ------- add, sub Instruction (덧셈, 뺄셈) 위의 표에서 메모리와 상수 간에 명령어의 속도를 보면 다른 것보다 상당히 느리다.예제 코드로 설명을 덧붙이자면... int A = 0; A = 0;while(A < 10){A++;} A를 한번 더 초기화하면서 위의 표를 참고 하면 엄청나게 많은 시간이 소모되었다.최적활를 위해서 소스를 짤 때에 이런 것을 유의하여 작성해야 한다. ------- inc, dec Instruction (increase, decreace 1 증가, 감소) 386 속도 용량add eax , 1 2 5inc eax 2 1 똑같은 +1 을 하는 코드를 사용한다면inc를 사용하..