본문 바로가기

IT

x86 16bit 어셈블리(Assembly) 예제 정리 - 3 /* written by kaspy (kaspyx@gmail.com)*/ 문득 어셈블리 언어를 보다보면 자주쓰지 않는 만큼 해깔릴수 있는것들이 많은것 같아서 정리해보았다. 특히 주소 연산 mov [100], 10 같은것들많이 사용되지 않는 16bit 어셈블리어지만 레지스터 크기나 명령어 이름만 조금 바꾼 형태로 익힌다면 32bit도 그리 어렵지는 않을것이다.(ex. 16bit 레지스터 ax -> 32bit는 eax) 이어서 진행~~ NEG 명령어예제)neg cx ;cx를 보수형태로 바꾸어 줍니다.;19 -> 0000 0000 0001 1001 ->; 1111 1111 1110 0110 -> ffe7 CBW 명령어예제)mov al, f1cbwmov al,3cbw ;cbw는 al레지스터를 ax 로 확장하는 .. 더보기
x86 16bit 어셈블리(Assembly) 예제 정리 - 2 /* written by kaspy (kaspyx@gmail.com)*/ 문득 어셈블리 언어를 보다보면 자주쓰지 않는 만큼 해깔릴수 있는것들이 많은것 같아서 정리해보았다. 특히 주소 연산 mov [100], 10 같은것들많이 사용되지 않는 16bit 어셈블리어지만 레지스터 크기나 명령어 이름만 조금 바꾼 형태로 익힌다면 32bit도 그리 어렵지는 않을것이다.(ex. 16bit 레지스터 ax -> 32bit는 eax) 이어서 진행~ 문자열 출력예제)mov ah, 9int 21h ;ax의 상위 레지스터 ax에 9를 저장하고 int 21h명령어를 실행시키면 dx에 주소에 저장된 값의 문자가 ;'$' 가 나올 때 까지 출력됩니다. ES 세그먼트 오프셋을 이용한 MOV예제)mov es, axmov ax, [000.. 더보기
DLL 배포할때 재정의 오류관련.. C Standard를 기준으로 설명하였다. DLL을 컴파일 할때 소스코드가 길어지고 CPP파일이 많아지고 헤더파일이 많아지면 재정의 오류가 생길수 있다. 이상하게 헤더 중복 방직 매크로(#pragma once)를 달아놔도 컴파일을 할때 재정의 오류가 나는데 오류메시지는 보통 아래와 같다. =============================================================================================c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winsock2.h(1815): error C2375: 'listen' : 재정의. 링크가 다릅니다.c:\program files (x86)\micr.. 더보기
C/C++ MFC 프로그램 배포관련 오류들에 대해서... 자신이 개발한 프로그램이 다른 컴퓨터에서도 실행하려면 배포관련 컴파일을 해야하는데 대표적으로 Visual Stduio 2010 프로젝트 속성 -> 정적 라이브러리에서 MFC사용 옵션을 하고 컴파일 했을때 나는 오류인데 메시지는 보통 아래와 같다.error LNK2001: __imp__wsprintfA 외부 기호를 확인할 수 없습니다.error LNK2001: __imp__wsprintfA 외부 기호를 확인할 수 없습니다.error LNK2019: __imp__wvsprintfA@12 외부 기호(참조 위치: "void __cdecl DbgPrintf(char *,...)" (?DbgPrintf@@YAXPADZZ) 함수)에서 확인하지 못했습니다.error LNK2019: __imp__MessageBoxA@1.. 더보기
x86 16bit 어셈블리(Assembly) 예제 정리 - 1 /* written by kaspy (kaspyx@gmail.com)*/ 문득 어셈블리 언어를 보다보면 자주쓰지 않는 만큼 해깔릴수 있는것들이 많은것 같아서 정리해보았다. 특히 주소 연산 mov [100], 10 같은것들많이 사용되지 않는 16bit 어셈블리어지만 레지스터 크기나 명령어 이름만 조금 바꾼 형태로 익힌다면 32bit도 그리 어렵지는 않을것이다.(ex. 16bit 레지스터 ax -> 32bit는 eax) 우선은 간단한 명령어부터~ MOV 레지스터, 숫자예제); ax 레지스터에 지정된 숫자를 넣어줍니다.mov ax, 3 MOV 레지스터, [주소]예제)mov ax, [0103];mov ax, x(변수) ;ax 레지스터에 지정된 숫자를 넣어줍니다. ;여기서는 0103 번지의 값을 ax에 넣으라는 .. 더보기
windump를 사용하여 TCP/IP 패킷 분석하기 /* written by kaspy (kaspyx@gmail.com)*/ windump를 이용하여 tcp 패킷을 분석해 보았다. 아래와같은 명령어로 실행하였다.기본적인 사용법과 다운로드는 여기 링크 참조!! -> Link(1번 네트워크 인터페이스의 7778번 포트를 감청) 서버쪽에서는 nc -l -p 7778 을 사용하여 7778번 포트를 열어 접속을 기다리게 하였다.(리눅스 서버)클라이언트에서는 nc를 사용하여 7778번 포트에 접속한다음 hello 라는 문자열을 보내고 ctr + c 하여 접속을 끊었다.(윈도우 클라이언트) TCP 통신 패킷 분석tcp/ip 통신은 안정형 통신 방법으로 데이터를 주고 받을때마다 ACK 및 S/N 번호로 데이터가 오고가는 순서를 보장할수있다. 일명 3 Way Handsh.. 더보기
windump 사용법 /* written by kaspy (kaspyx@gmail.com)*/ windump는 리눅스/유닉스 명령어인 tcpdump 라는 명령어를 윈도에 맞게 만든 실행 명령어로 기본적인 사용법은 같다.첨부파일을 통해 다운 받아주기 바란다.(첫번째껀 설치, 두번째는 실행파일)(http://www.winpcap.org/windump/install/default.htm 출처) 기본적인 사용법은 위와 같고 주로 사용되는 파라미터에대한 사용법은 아래와 같다.-a 네트워크와 브로드 캐스트 주소이름 변경-B size 수신 버퍼크기를 size로 수정-c count 만큼만 패킷 수집-D 네트워크 인터페이스 출력-F file file에 정의된 필터를 적용-q 패킷을 간단한 형태로출력-t 각 라인에 시간을 출력하지 않음-i 모.. 더보기
윈도우(Windows) nc 사용하기 리눅스 운영체제에서는 nc(netcat)이라는 명령어로 통신을 위해 간단하게 접속하거나 특정 포트를 열고 기다리거나 파일도 주고받을수있다.윈도에서는 그런 명령어가 없는데 아래 파일을 다운로드 받은다음에 환경변수등에 잡아주면 윈도우 명령어처럼 사용할수 있다.(백신에서 바이러스로 잡히는데.. 백신에서 예외설정을 해줘야 제대로 사용할수있다.;;) 나같은 경우는 C:\Users\nc 디렉토리에 nc라는 파일을 다운로드 하고 환경변수를 잡아주었다.아래는 간단한 사용 예제를 적어보았다. 로컬 컴퓨터를 기준으로 서버 아이피는 127.0.0.1로 하였다. * nc를 이용한 채팅- 서버의 경우nc -l -p 4343-> 4343 포트를 열고 접속을 기다린다. - 클라이언트의 경우nc 127.0.0.1 4343(nc IP.. 더보기
윈도우(Windows) 환경에서 파이썬(Python) 개발환경 구축하기 윈도우즈 환경에서 파이썬 애플리케이션 개발과 디버깅을 빠르게 수행하려면 IDE와 파이썬 인터프리터가 설치 되어야한다. 이클립스(Eclipse)환경에서 설치가 됬다는 전제하에 설명 하겠다.우선 이클립스를 다운받는다. 이클립스는 별도의 설치과정이 없고 압축을 풀어서 사용하기 때문에 굉장히 편한거같다. 이클립스 (Ecplise) 다운로드 사이트(http://www.eclipse.org/downloads/) http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/R-4.1.2-201202230900/eclipse-SDK-4.1.2-win32.zip 다운로드가 완료되었으면 이클립스를실행시키자Help 메뉴의 Install New So.. 더보기
야코비(Jacobi) Method C언어로 구현하기 /* Jacobi Method */ #include #include #include #include int it=0;double **a;double *b;double *s;#define EPS 1e-5 // 최대 오차#define ITOR 500 // 최대 반복 횟수 int n; // 행렬의 갯수 FILE *fp; double** matrix_malloc(int n){ double **a; int i,j; a=(double **)malloc(n*sizeof(double)); for(i=0;i 더보기