# Week6 10/22
## 作業繳交截止時間 11/06 晚上 9 點整 (依最後編輯時間為準)
1. 完成 Python Script 並附上程式碼
- ```python=
print("Paste Your Code Here")
```
2. 將下列組語翻回 C 語言 (Hint: `gcc source.c -no-pie -fno-stack-protector -o outputfile` or `https://godbolt.org/`)
1. 題目 Sample
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: b8 00 00 00 00 mov eax,0x0
4004a0: 5d pop rbp
4004a1: c3 ret
```
- 答案
```c=https://hackmd.io/UsEPsSMMQTC75D53px9huQ#
#include <stdio.h>
int main () {
return 0;
}
```
2. 題目 Variables
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 fc 0a 00 00 00 mov DWORD PTR [rbp-0x4],0xa
4004a2: b8 00 00 00 00 mov eax,0x0
4004a7: 5d pop rbp
4004a8: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
int a = 10;
return 0;
}
```
3. 題目 Variables
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c6 45 ff 61 mov BYTE PTR [rbp-0x1],0x61
40049f: b8 00 00 00 00 mov eax,0x0
4004a4: 5d pop rbp
4004a5: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
char a = 'a';
return 0;
}
```
4. 題目 Variables
```asm=
400517 <main>:
400517: 55 push rbp
400518: 48 89 e5 mov rbp,rsp
40051b: 48 83 ec 20 sub rsp,0x20
40052e: c7 45 ec 0a 00 00 00 mov DWORD PTR [rbp-0x14],0xa
400535: 48 8d 45 ec lea rax,[rbp-0x14]
400539: 48 89 45 f0 mov QWORD PTR [rbp-0x10],rax
40053d: b8 00 00 00 00 mov eax,0x0
400556: c9 leave
400557: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
int a=10;
long b=a+32;
return 0;
}
```
5. 題目 Condition Flow
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 fc 0a 00 00 00 mov DWORD PTR [rbp-0x4],0xa
4004a2: 83 7d fc 14 cmp DWORD PTR [rbp-0x4],0x14
4004a6: 7e 07 jle 4004af <main+0x18>
4004a8: b8 00 00 00 00 mov eax,0x0
4004ad: eb 05 jmp 4004b4 <main+0x1d>
4004af: b8 01 00 00 00 mov eax,0x1
4004b4: 5d pop rbp
4004b5: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```
6. 題目 Condition Flow
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
4004a2: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]
4004a5: 83 f8 02 cmp eax,0x2
4004a8: 74 10 je 4004ba <main+0x23>
4004aa: 83 f8 03 cmp eax,0x3
4004ad: 74 11 je 4004c0 <main+0x29>
4004af: 83 f8 01 cmp eax,0x1
4004b2: 75 12 jne 4004c6 <main+0x2f>
4004b4: c6 45 fb 41 mov BYTE PTR [rbp-0x5],0x41
4004b8: eb 10 jmp 4004ca <main+0x33>
4004ba: c6 45 fb 42 mov BYTE PTR [rbp-0x5],0x42
4004be: eb 0a jmp 4004ca <main+0x33>
4004c0: c6 45 fb 43 mov BYTE PTR [rbp-0x5],0x43
4004c4: eb 04 jmp 4004ca <main+0x33>
4004c6: c6 45 fb 44 mov BYTE PTR [rbp-0x5],0x44
4004ca: b8 00 00 00 00 mov eax,0x0
4004cf: 5d pop rbp
4004d0: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```
7. 題目 Condition Flow
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 f8 00 00 00 00 mov DWORD PTR [rbp-0x8],0x0
4004a2: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
4004a9: eb 0a jmp 4004b5 <main+0x1e>
4004ab: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]
4004ae: 01 45 f8 add DWORD PTR [rbp-0x8],eax
4004b1: 83 45 fc 01 add DWORD PTR [rbp-0x4],0x1
4004b5: 83 7d fc 09 cmp DWORD PTR [rbp-0x4],0x9
4004b9: 7e f0 jle 4004ab <main+0x14>
4004bb: b8 00 00 00 00 mov eax,0x0
4004c0: 5d pop rbp
4004c1: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```
8. 題目 Arithmetic Operation
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 f4 05 00 00 00 mov DWORD PTR [rbp-0xc],0x5
4004a2: c7 45 f8 05 00 00 00 mov DWORD PTR [rbp-0x8],0x5
4004a9: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
4004b0: 8b 55 f4 mov edx,DWORD PTR [rbp-0xc]
4004b3: 8b 45 f8 mov eax,DWORD PTR [rbp-0x8]
4004b6: 01 d0 add eax,edx
4004b8: 89 45 fc mov DWORD PTR [rbp-0x4],eax
4004bb: b8 00 00 00 00 mov eax,0x0
4004c0: 5d pop rbp
4004c1: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```
9. 題目 Arithmetic Operation
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 f4 05 00 00 00 mov DWORD PTR [rbp-0xc],0x5
4004a2: c7 45 f8 05 00 00 00 mov DWORD PTR [rbp-0x8],0x5
4004a9: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
4004b0: 8b 45 f4 mov eax,DWORD PTR [rbp-0xc]
4004b3: 2b 45 f8 sub eax,DWORD PTR [rbp-0x8]
4004b6: 89 45 fc mov DWORD PTR [rbp-0x4],eax
4004b9: b8 00 00 00 00 mov eax,0x0
4004be: 5d pop rbp
4004bf: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```
10. 題目 Arithmetic Operation
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 f4 05 00 00 00 mov DWORD PTR [rbp-0xc],0x5
4004a2: c7 45 f8 05 00 00 00 mov DWORD PTR [rbp-0x8],0x5
4004a9: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
4004b0: 8b 45 f4 mov eax,DWORD PTR [rbp-0xc]
4004b3: 0f af 45 f8 imul eax,DWORD PTR [rbp-0x8]
4004b7: 89 45 fc mov DWORD PTR [rbp-0x4],eax
4004ba: b8 00 00 00 00 mov eax,0x0
4004bf: 5d pop rbp
4004c0: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```
11. 題目 Bitwise Operation
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 f8 04 00 00 00 mov DWORD PTR [rbp-0x8],0x4
4004a2: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
4004a9: 8b 45 f8 mov eax,DWORD PTR [rbp-0x8]
4004ac: 83 e0 01 and eax,0x1
4004af: 89 45 fc mov DWORD PTR [rbp-0x4],eax
4004b2: b8 00 00 00 00 mov eax,0x0
4004b7: 5d pop rbp
4004b8: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```
12. 題目 Bitwise Operation
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 f8 04 00 00 00 mov DWORD PTR [rbp-0x8],0x4
4004a2: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
4004a9: 8b 45 f8 mov eax,DWORD PTR [rbp-0x8]
4004ac: f7 d0 not eax
4004ae: 89 45 fc mov DWORD PTR [rbp-0x4],eax
4004b1: b8 00 00 00 00 mov eax,0x0
4004b6: 5d pop rbp
4004b7: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```
13. 題目 Bitwise Operation
```asm=
400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: c7 45 fc 0a 00 00 00 mov DWORD PTR [rbp-0x4],0xa
4004a2: d1 7d fc sar DWORD PTR [rbp-0x4],1
4004a5: b8 00 00 00 00 mov eax,0x0
4004aa: 5d pop rbp
4004ab: c3 ret
```
- 答案
```c=
#include <stdio.h>
int main () {
/* Put Your Code Here */
return 0;
}
```