ABC 452 후기
3번째 앳코더를 마치고 돌아왔습니다! 사실 이번 후기는 좀 늦게 작성해서 올리게 되었는데 말이죠. 그 사유는...
3번째 앳코더를 마치고 돌아왔습니다! 사실 이번 후기는 좀 늦게 작성해서 올리게 되었는데 말이죠. 그 사유는...
후기 2번째 앳코더를 무사히 마쳤습니다!! 이번 앳코는 C번까지는 아주 순조롭게 풀었던거 같네요!
E: Fibonacci String 대회때는 고민만 하다가 시간에 치여서 결국 풀지 못했던 문제였는데, 대회가 끝난 뒤 다시한번 고민해보았었다.
코포를 예전에 몇번 쳐본 기억은 있지만 앳코더는 처음 쳐보네요 원래 백준 풀던것과 다르게 발상을 이리저리 잘 해야하는 문제들이 나왔어서 생각보다 푸는데 재밌었고 나름 긴장도 되고 했었습니다 ㅎㅎ..
어셈블리를 하다보면 여러가지 종류의 prefix가 있는 것을 볼 수 있다. 오늘은 REX에 대해서 먼저 알아보자. 사실 실제로 어셈블리를 하면서 REX prefix를 직접 만나는 일은 없었을 것이다. 왜냐하면 저 prefix는 어셈블리에 알게 모르게 어셈블러에 의해 처
어셈블리 기본 Instruction중 하나인 LEA(Load Effective Address)에 대해 알아보자. Effective Address가 무엇인가? 예전에 어셈블리와 기계어에 대한 포스트 에서 언급한 바 있는 SIB란 녀석이 있었다. Base + Scale *
최근 어셈블리를 사용하던 도중 왜 돌아가지 라는 생각이 드는 코드가 있었다. 엥? 뭐가 문제인데요? 이전 글 을 참고해 보자. Scale의 경우에는 보이다 싶이 1, 2, 4, 8만 사용될 수 있다. 그렇다. Instruction 상에는 저런 SIB가 존재할 수 없다는
최근 IR -> Binary 프로젝트를 작업하면서 Instruction이 Byte코드로 변환되는 과정을 공부했었다. 여러 블로그와 인텔 문서까지 봤는데 좀 쉽게 설명하면서 내용을 정리하고자 올린다. ( Intel® 64 and IA-32 Architectures
오늘 할 것은 Assembly에서 "직접" SIMD를 사용해보는 것이다. (구글링과 직접 실험을 통해 얻은 지식을 바탕으로 한 것이기 때문에 더 효율적이고 보편적인 코드가 있을 수 있음) 가끔 프로그램을 분해 해보면 movups같은 이상한 instruction들이 보이
함수의 반환에 대한 고찰 오늘은 함수 반환에 대해 간단하게 알아보고자 한다. * 컴파일 옵션은 다음과 같다 gcc -o Main Main.c -O0 보통 함수에서 값을 반환하게 되면, eax(32bits), rax(64bits) 레지스터를 사용하게 된다. 그리하여 th
오늘은 함수 반환에 대해 간단하게 알아보고자 한다. * 컴파일 옵션은 다음과 같다 보통 함수에서 값을 반환하게 되면, eax(32bits), rax(64bits) 레지스터를 사용하게 된다. 그리하여 main에서 int를 반환할때도 eax나 rax에 exit_code를
C# 타입 키워드에는 여러개가 존재한다. 그 중, C/C++, Java에 없는 키워드가 하나 존재하는데, 바로 오늘의 주인공 string이다. C/C++에서는 사용할 수 없는 기능, switch문에 string을 쓰는 방식에 대해 알아보고자 한다. char* 또는 st
들어가기 앞서 - 해당 글은 GCC와 C파일을 기준으로 작성되었습니다. 컴파일러마다 다를 수도 있습니다. 기본적으로 어셈을 배울 때 종료 시에 eax 또는 rax를 0으로 초기화한 후 ret을 해주는 과정을 볼 수 있다 C언어에서 main에서 return 0;을 사용하
먼저 GCC의 최적화 방식을 알아보자. GCC는 상수가 들어왔을 때 해당 값에 따라서 비교하는 명령어(어셈에선 cmp)를 생성하지 않는다. 즉, 다음과 같은 식에서 GCC는 cmp와 je(jump)를 생성하지 않고 바로 내부 코드를 생성한다 이 방식은 연산자가 존재할
0은 false고 나머지를 true로 받는 이유는 C 컴파일러 마음대로 이기 때문이다. 역어셈을 해보면 int -> bool하는 과정은 그저 cmp 하나로 작성되어 있음을 알 수 있다 cmp 변수 0x0 (cmp는 compare) 실제로 다음 코드를 역어셈 해보면 재밌
1. for문에서 조건식에 아무것도 안넣으면 무한으로 돌아가는 이유는 역어셈 했을때를 보면 알 수 있다 for에 모든 부분에 (코드블록 내부 포함) 아무 코드도 존재하지 않으면 jmp를 통해서 자기 자신으로 무한 점프를 시도한다 그러나 다른 부분이 하나라도 존재한다면
백준 숏코딩에 빠진 필자가 들고 온 것은 바로 C# 숏코딩이다. 사실 C# 숏코딩을 해도 C같은 다른 언어(특히 GolfScript)에 못 미치는건 사실이다. 다만, C# 숏코딩은 타 언어에 비해서 경쟁력이 낮아 C# 카테고리에서 1등을 차지하기 쉬울것이다. 그럼 바이
리눅스 x 윈도우 듀얼 부팅 후 리눅스에 쓸 배경이 필요해서 직접 파워포인트로 제작해보았다.
보통 우리가 어떤 언어를 배우던 대부분 재귀 함수라는 것을 많이 접해보았을 것이다. 그리고 재귀함수의 예로써 가장 많이 사용되는 것이 바로 "피보나치 수열"이다. 재귀함수를 가르치기 위해서 다음 같은 방법으로 재귀 함수를 표현하는데.. 이는 크나큰 문제가 있다! 1,
C#에서 자주 보이는 구문이 하나 있다. 바로 "for". for은 반복을 해주는 반복문으로써 꽤 자주 쓰이게 되는데, 최근에 발견한 for에 관한 이야기이다. 우리가 잘 알고 있듯이 for문은 다음과 같이 사용한다. 이를 간단하게 나타내면 이렇게 나타낼
WPF를 사용하면서 가장 많이 사용되는 프로퍼티. Background 오늘은 Brush 관련한 이야기를 해보려 한다 WinForm에는 System.Drawing에서 Color 구조체를 사용하지만 WPF에서는 System.Windows.Media.Brush를 사용한다
오늘은 한글조합이 안되는 문제를 가지고 왔다. 윈도우 단축키 중에는 Windows + H : 참 메뉴의 공유를 바로 호출한다. 이러한 단축키가 있는데 이 단축키에 문제가 있다. 바로 이 단축키를 입력하는 순간 다음과 같은 이미지가 나오면서 한글이 조합이 되지 않
win32 를 보다보면 여러 신기한 메소드들이 많이 구현되어 있다. 그중에서 오늘은 keybd_event라는 메소드를 소개하겠는데, 이름에서 보이는것처럼 키보드 이벤트를 발생시키는 메소드다. keybd_event는 C++으로 user32.dll에 다음과 같이 정의되
C# 8.0에는 많은 기능들이 추가되었다. using 선언이라던지 인덱서의 개편등 여러 편리한 기능들이 많이 추가되었는데 닷넷프레임워크를 사용하면서 이러한 기능들을 못 누리는것은 말이 안되지 않는가? 그래서 이번에는 닷넷 프레임워크에서 C# 8.0을 사용해보려 한다.
비주얼 스튜디오 팁 가끔 그럴때가 있다. 내가 만든 cs파일 (예를 들어 Form.Init)을 Form.Designer.cs 처럼 특정 폼에 종속시켜버리고 싶은 경우가 있다. 아래의 사진과 같이 말이다