구조체가 메모리에 기록되는 방식을 알아보고
어셈블리어가 어떻게 작동하는지 알아보자
struct rec{
int a[4];
size_t i;
struct rec *next;
};
Linked List의 메모리 구성과 어셈블리
struct rec{
int a[4];
int i;
struct rec *next;
};
void set_val(struct rec *r, int val){
while(r){
int i = r->i;
r->a[i] = val;
r = r->next;
}
}
set_val 함수의 while문에 대한 어셈블리어를 알아보자
// %rdi = r
// %rsi = val
.L11:
moveslq 16(%rdi), %rax // %rax에 i값(시작주소 r에서 16만큼 떨어진) 을 넣어준다
movl %esi, (%rdi, %rax, 4) // val을 a[i] 에 넣어준다
movq 24(%rdi), %rdi // next 주소가 있는곳(시작주소에서 24만큼 떨어진곳)으로 r을 교체
testq %rdi, %rdi // r&r을 해준다
jne .L11 // r&r이 0이 아니면 r이 nullptr가 아닌 것이므로 L11로 돌아간다
'CS > SystemSoftware' 카테고리의 다른 글
SystemSoftware - Buffer OverFlow #1 (0) | 2021.05.19 |
---|---|
Bomb Lab Solution Phase_1 ~ secret_phase (1) | 2021.05.10 |
SystemSoftware - Machine data(Assembly) #1 (1) | 2021.04.28 |
SystemSoftware - float #2 (0) | 2021.04.20 |
SystemSoftware - float #1 (1) | 2021.04.20 |