개인 공부 (52) 썸네일형 리스트형 Reverse Engineering-008(반복문) 반복문 002에서 기본 문법으로 for문을 다뤘지만 이번에는 조건이 추가되었을 때 코드가 변하는지 확인해보기!! break문이 들어 갈 경우 continue문이 들어갈 경우 return문이 들어가는 경우 #include int loop(int c) { int d = 0; for (int i = 0; i 100일 경우 0x4010C4로 점프하고 아닐경우 0x4010A8를 실행한다 0x4010A8부터 ebp-4를 printf문으로 출력하고 ebp-4에 1을 더하고 0x401096으로 점프하는 것을 확인 0x401096으로 가서 ebp-8에 1을 더하고 다시 비교하는 것을 확인 이것을 통해 0x401094부터 0x4010C2가 for문이라는 것을 알 수 있다 ---> for (i = 0; i < 0x100; .. 인공지능P-001(Perceptron) AI (Artificial Intelligence) 역사 인공지능 1956년 다크머스 회의(Dartmouth Conference)를 통해 존 매시카(John McCarthy)가 인공지능이라는 용어를 제안하고 인공지능 분야를 확립하였다 튜링 테스트(Turing Test) & 모방게임(Imitation Game) 1950년 앨런 튜링에 의해 컴퓨터 프로그램의 지능을 측정할 수 있는 실험을 하였다 프로그램이 인간과 비슷한 행동을 한다면 그 프로그램은 인간의 지능과 유사한 지능을 가졌다고 인정하였다 튜링 테스트 초치 통과 프로그램 => Eugene Goostman 33% 사람으로 판정 -> 채팅을 통해 처음에는 사람과 사람과 채팅을 하고 프로그램과 사람의 채팅을 통해 테스트 퍼셉트론(Perceptron) ※ 인.. 인공지능P-000(간단한 인공지능 정리) 인공지능(Artificial Intelligence) 인간의 사고능력을 컴퓨터상에서 실현하는 기술 인지 과학적 측면 -> 인간의 사고과정을 연구 공학적 측면 -> 인간의 지적 능력을 기계에 이식하는 기술 인공지능의 분류 기호주의(Symbolsim) 계열 기호 규칙(rule)을 사용하는 규칙기반(Rule-based) 인공지능 연결 주의(connectionism) 계열 뉴런의 연결을 모방하는 신경망(Neural Network)기반 인공지능 지식 기반 방식 데이터의 패턴을 직접 알려주는 방식!! 8을 구멍이 2개이고 중간이 홀쭉하고 둥근 모양이라고 인식이 가능하다!! 하지만 다양한 물체를 인식시킬 때는 오류를 발생하는 한계점이 생긴다 ex) 단추를 인식시키면 단추라는 패턴은 어떻게 기술할것인지에 대한 문제가 .. Reverse Engineering-007 PE-02(PE-01추가 & 조건문) 조건문의 기본 if(x > 0x100){ printf("x > 100\n"); } 위 코드를 디스 어셈블하게 되면 00401024cmpeax, 100h 00401029jle0x401038 0040102Bpushoffset ax100; x > 100\n 00401030call sub_401050 00401035addesp, 4 00401038popecx 00401039retn jle는 왼쪽 인자(operand)의 값이 오른쪽 인자의 값보다 작거나 같으면 점프! eax(x)가 100보다 작거나 같으면 경우 점프 eax(x)가 100보다 크면 0x40102B로 가서 "x>100\n" 을 출력한다 if(x == 0){ printf("x=0\n"); } 조건을 위와 같이 바꾸면 00401024cmpeax, 100.. Reverse Engineering-006 PE-01 PE 헤더(PE Header) PE(Portable Executalbe File Format) Windows 실행 파일 형식을 의미 실행 파일 게열 : EXE, SCR(Screen Saver) 라이브러리 계열 : DLL, OCX(Active X) 드라이버 계열 : SYS 오브젝트 파일 계열 : OBJ Windows 환경에 따라 32bit(PE32), 64bit(PE+ 또는 PE32+)라고 부른다 PE파일을 통해서 프로그램이 사용하는 API또는 DLL등 다양한 정보와 어느 메모리 주소에 로딩되는지 확인할 수 있다 Linux나 UNIX 계열의 환경에서는 PE파일과 비슷한 형식으로 ELF(Executable and Linkable Format)파일이 존재한다 빌드 과정 obj 파일 -> [c/ cpp] 파일을.. 네트워크P-008(스레드 & [이전 실습] 파일 전송) 멀티 스레드 TCP 서버 - 클라이언트의 문제점 [1] 동시에 둘 이상의 클라이언트 서비스가 불가능하다 첫번째로 접속한 클라이언트가 보낸 메시지는 서버 화면에 정상적으로 표시 그 다음으로 접속한 클라이언트가 보낸 메시지들은 표시되지 않는다 [1-1] 해결책 : 서버가 각 클라이언트와 통신하는 시간을 짧게 줄인다 장점 : 구현이 쉽다, 서버의 시스템 자원을 가장 적게 사용한다 단점 : 각 클라이언트의 처리 지연 시간이 길어질 수 있다 --> 처리 효율이 떨어진다 [1-2] 해결책 : 각 클라이언트를 스레드를 이용해서 독립적으로 처리한다 장점 : 스레드 생성 함수와 동기화를 이용한다 단점 : 서버의 시스템 자원을 가장 많이 사용한다 --> 접속한 클라이언트 수와 비례하게 스레드 생성!! [2] 서버와 클라이.. 네트워크P-008 (두 데이터 합 & 1:1 간단한 TCP 채팅 ) TCP 두 수 합 구하는 프로그램 작성 클라이언트에게 두 정수를 입력 받아서 서버가 데이터를 연산하여 보내준다 #include "Common.h" #define SERVERPORT 9000 #define SIZE 512 int main() { int retval; // ===== 윈속 초기화 ===== WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)return 1; // ===== 소켓 생성 ===== SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, 0);// IPv4, TCP 통신 소켓 if (listenSocket == INVALID_SOCKET)printf("Socket ERROR!!!\n"); // ==.. 네트워크P-007 (데이터 전송 실습) 데이터 전송 고정 길이 + 가변 길이 데이터 전송 송신 측에서 가변 길이 데이터 크기를 바로 계산할 수 있다면 고정 길이 + 가변 길이 데이터 전송이 효과적이다!! 두번의 데이터 수신으로 가변 길이 데이터의 경계를 구분해 읽을 수 있다 #include "Common.h" #define SERVERPORT 9000 #define BUFSIZE 512 int main() { WSADATA wsa; // ===== 윈속 초기화 ===== if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)return 1; // ===== 소켓 생성 ===== SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, 0);// IPv4, TCP 통신 소켓 if (list.. 이전 1 2 3 4 5 6 7 다음