1. gdb를 실행할 파일을 만들어준다. 나는 다음과 같은 코드의 파일을 만들어 줬다 2. 컴파일 gcc -m32 -g -o ex1 ex1.c gdb 를 이용하기 위해서는 -g 옵션을 추가해줘야함! 3. gdb 실행 gdb ex1 set disassembly-flavor intel : intel의 어셈블리 코드 문법을 사용하겠다는 명령어 disassemble main : main 함수의 어셈블리 코드를 보는 명령어 display register : 해당 register의 메모리값을 출력해달라는 명령어 b *0x804841c : 해당 주소에 breakpoint를 걸겠다는 명령어 (여기선 main의 첫번째 instruction주소를 사용함) r : 프로그램 수행!하는 명령어 ni : 다음 instructio..
CPU 는 instruction(명령어)를 fetch, interpret, execute 한다. - Fetch : 메모리상에 존재하는 명령어를 CPU로 가져옴 - Interpret : 가져온 명령어를 CPU가 해석 - Execute : 해석된 명령어대로 CPU가 실행 cpu 의 execution cylce은 다음과 같다 . - 다음 instruction(명령어)를 메모리에서 가져온다. (pointed by eip) - eip를 업데이트한다. - fetch된 instruction을 실행한다. ... (반복) 레지스터란 ? - CPU안에 있는 저장 가능한 공간 (휘발성) - CPU가 사용하는 저장 공간중에 가장 빠른 저장공간 💻 어셈블리 레지스터 1. eip : Instruction Pointer (명령 포..
방학동안 스프링 부트 공부를 하긴 했는데, 전체적인 정리가 필요해 보여 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책으로 공부해보려고 한다 🤩🤩 아는 내용이라고 휘리릭 넘어가지 않는 것이 나의 목표 .. 꼼꼼히 공부해보겠다 !! 👩🏻💻 스프링 부트 프로젝트 만들기 start.spring.io를 이용해 프로젝트를 만드는 방법도 있지만, 이번에는 인텔리제이에서 new project를 다음과 같이 gradle로 만들어줬다. ( Artifact : 프로젝트 이름 ) 의존성 주입이 필요하면 직접 할거라 그냥 넘어가줬다. > build.gradle의 코드가 무슨 역할을 하는지, 의존성 추가가 필요하면 어떻게 해야하는지 알아보기 위함 ! 👩🏻💻 build.gradle 구경하기 만들어진 프로젝트의 build...
컴퓨터 프로그램은 수많은 Instruction으로 이루어져 있다고 할 수 있다. 개발자가 프로그래밍 언어로 작성한 코드들은 assembly어로 컴파일 되어 OS로 전달되고, OS는 전달 받은 명령을 한줄 한줄 순서대로 읽으며 그 계산을 CPU의 여러 register에게 맡긴다. ✏️ Register PC(Program Counter) - 다음에 반입할 명령어의 주소를 저장. (명령어를 반입할 주소) IR(Instruction Register) - PC에 저장되어 있는 주소에 접근하여 현재 수행할 명령어를 가져와 저장. (반입한 명령어) PSW(Program status word) - 지금 실행되고 있는 프로그램이 OS 커널인지, 사용자 프로그램인지 구분하는 상태 코드를 저장. 그에 따라 CPU가 접근할 ..
validation 로직을 테스트하는 도중 아래과 같은 에러를 마주쳤다^^; 이 것은 ! ! 존재하지 않는 ! memberId로 member를 조회할 경우 값이 없기 때문에 나타나는 현상이다. -> get() 메서드 코드를 보면 자바에서는 Optional.get()을 사용했을 때 값이 없다면 No value present 메세지가 출력하는 걸 알 수 있다. ✏️ 해결 1 그래서 Optional 객체에 저장된 값이 null이면 get()메서드를 사용했을 때 No value present 예외가 발생하므로 get()을 호출하기 전에 isPresent() 메서드를 사용하여 Optional 객체에 저장된 값이 null인지 아닌지를 먼저 확인하는 것이 좋다구 한다 ~.~ public Member findMembe..