프로그래밍 일반/프로그래밍 기타 4

[어셈블리] OllyDbg 소개

어셈블리를 디버깅 할 수 있는 OllyDbg를 소개합니다. 이 툴을 이용하여 어셈블리의 동작을 디버깅 및 확인을 할 수 있어서 어셈블리어를 학습하는데 도움이 됩니다. 그리고, 리버스 엔지니어링 툴로 사용되는 프로그램입니다. OllyDbg 설치 version 2.01을 받습니다. 받은 후 압축을 풀면 OllyDbg.exe 파일을 관리자 권한으로 실행합니다. 기본 기능 & 레이아웃 사용을 위해서는 먼저 실행 파일을 열어야 합니다. 실행 파일을 열면 다음과 같이 로딩되며, 이 화면은 코드뷰, 레지스터 뷰, 덤프 뷰, 스택뷰로 구성되어 있습니다. 코드 뷰에서는 기계어와 어셈블리어를 볼 수 있습니다. 어셈블리어 영역을 마우스 더블 클릭하여 어셈블리 명령어를 입력 할 수 있습니다. 디버그와 트레이스 기능들을 활용하..

Visual Studio 인라인 어셈블리 x86 예제

power #include int power2( int num, int power ); int main( void ) { printf_s( "3 times 2 to the power of 5 is %d\n", \ power2( 3, 5) ); } int power2( int num, int power ) { __asm { mov eax, num ; Get first argument mov ecx, power ; Get second argument shl eax, cl ; EAX = EAX * ( 2 to the power of CL ) } // Return with result in EAX } docs.microsoft.com/ko-kr/cpp/assembler/inline/writing-function..

Visual Studio 2019에서 어셈블리 64bit 프로젝트 생성

어셈블리를 위한 프로젝트 생성 새 빈 콘솔 프로젝트를 만듭니다. 64Bit로 변경합니다. 빌드 종속성에서 masm을 체크합니다. .asm 파일과 .cpp 파일을 하나씩 추가 합니다. asm 파일의 속성을 선택합니다. asm 파일의 항목 형식이 Microsoft Macro Assemply로 선택된 것을 확인 합니다. 어셈블리에서 표준 함수들 사용 할 수 있도록 하자 printf, scanf와 같은 표준 함수들을 어셈블리에서 사용할 수 있게 하려면 다음과 같이 두 개의 라이브러리를 추가해주어야 합니다. 프로젝트 속성의 링커 -> 일반 -> 추가 속성에서 다음과 같이 두 라이브러리를 추가 합니다. legacy_stdio_definitions.lib legacy_stdio_wide_specifiers.lib 예..

CPU 레지스터

레지스터는 CPU 내부에 존재하는 다목적 메모리(저장 공간)입니다. CPU와 함께 있는 메모리 이므로 고속으로 데이터를 처리할 수 있습니다. 간단히 레지스터는 CPU가 사용하는 변수로 생각면 좋습니다. IA-32(Intel Architecture, 32bit) 레지스터의 구성은 아래 그림과 같습니다. 범용 레지스터(General-Purpose Registers)EAX (Extended Accumulator Register)산술연산 명령에서 상수/변수 값을 저장하거나 함수의 리턴 값이 저장되는 용도로도 사용됩니다. EDX(Extended Data Register)EAX와 함께 복잡한 연산을 위한 추가적인 데이터를 저장할 때 사용됩니다. 리턴 값 용도록는 사용되지 않습니다. EDX는 EAX의 확장 개념으로 ..