Devlog
Home / Tag

#assembly

prefix { REX, VEX, EVEX } : REX 편

어셈블리를 하다보면 여러가지 종류의 prefix가 있는 것을 볼 수 있다. 오늘은 REX에 대해서 먼저 알아보자. 사실 실제로 어셈블리를 하면서 REX prefix를 직접 만나는 일은 없었을 것이다. 왜냐하면 저 prefix는 어셈블리에 알게 모르게 어셈블러에 의해 처

Load Effective Address

어셈블리 기본 Instruction중 하나인 LEA(Load Effective Address)에 대해 알아보자. Effective Address가 무엇인가? 예전에 어셈블리와 기계어에 대한 포스트 에서 언급한 바 있는 SIB란 녀석이 있었다. Base + Scale *

ModR/M과 SIB에 관한 이야기 1

최근 어셈블리를 사용하던 도중 왜 돌아가지 라는 생각이 드는 코드가 있었다. 엥? 뭐가 문제인데요? 이전 글 을 참고해 보자. Scale의 경우에는 보이다 싶이 1, 2, 4, 8만 사용될 수 있다. 그렇다. Instruction 상에는 저런 SIB가 존재할 수 없다는

어셈블리와 기계어에 관해서

최근 IR -> Binary 프로젝트를 작업하면서 Instruction이 Byte코드로 변환되는 과정을 공부했었다. 여러 블로그와 인텔 문서까지 봤는데 좀 쉽게 설명하면서 내용을 정리하고자 올린다. ( Intel® 64 and IA-32 Architectures

SIMD in Assembly

오늘 할 것은 Assembly에서 "직접" SIMD를 사용해보는 것이다. (구글링과 직접 실험을 통해 얻은 지식을 바탕으로 한 것이기 때문에 더 효율적이고 보편적인 코드가 있을 수 있음) 가끔 프로그램을 분해 해보면 movups같은 이상한 instruction들이 보이

struct 반환에 대한 고찰

함수의 반환에 대한 고찰 오늘은 함수 반환에 대해 간단하게 알아보고자 한다. * 컴파일 옵션은 다음과 같다 gcc -o Main Main.c -O0 보통 함수에서 값을 반환하게 되면, eax(32bits), rax(64bits) 레지스터를 사용하게 된다. 그리하여 th

for에 관한 작은 고찰 (In C)

1. for문에서 조건식에 아무것도 안넣으면 무한으로 돌아가는 이유는 역어셈 했을때를 보면 알 수 있다 for에 모든 부분에 (코드블록 내부 포함) 아무 코드도 존재하지 않으면 jmp를 통해서 자기 자신으로 무한 점프를 시도한다 그러나 다른 부분이 하나라도 존재한다면