asm
[Assembly] 디버깅을 위한 8086 어셈블리
[Assembly] 디버깅을 위한 8086 어셈블리
2016.01.17디버깅을 위해서는 항상 소스코드 레벨에서 할 수 없기때문에 어셈블리언어를 읽을 수 있어야 합니다.디버깅을 위한 어셈블리는 언어를 깊이 많이 알지 못하더라도 디버깅을 할 수 있지만,어셈블리를 모르면 디버깅하는데 많은 어려움이 있으므로 이번에 몇가지 소개시켜드리겠습니다.실제로 디버깅시 사용되는 어셈블리어는 많이 없으며, 자주 나오는 패턴에는 소스코드를 보듯 익숙해질 필요가 있습니다. ASSEMBLY 가장 대표적인 명령어를 예로 들자면 아래와 같습니다.mov (값을 대입)add (더하기)sub (빼기)inc (1 더하기)dec (1 빼기)jmp (go to)call (함수 호출)cmp (두 값을 비교) 각각 C언어와 비교하면서 어떻게 코드가 생성되는지 보겠습니다. 해당 코드는 visual studio 2015..
__cdecl, __stdcall, __fastcall x86 호출 규약(Calling Convention)
__cdecl, __stdcall, __fastcall x86 호출 규약(Calling Convention)
2016.01.01Calling Convention X86에선 호출 규약이 __cdecl, __stacll, __fastcall 등으로 나누어있지만 x64에선 __fastcall 하나의 호출 규약만을 사용하도록 정의 되어있습니다. (__fastcall은 x86 전용이라고 합니다. x64는 추후 다시 정리하겠습니다!)오늘은 x86 호출 규약에 대해서만 정리를 해보겠습니다. 함수 호출규약을 아무것도 입력하지 않으면 기본값은 __cdecl 입니다.해당 테스트는 Visual Studio 2015 Community 에서 이루어졌습니다. __cdecl (c declaration) 이 규약에서 호출자는 스택에서 인수를 정리하며, printf() 와 같은 가변 인자 함수를 지원합니다.함수의 호출시 함수 호출 전과 함수가 끝난 후의 ES..