Created
December 31, 2024 17:37
-
-
Save cacharle/dab0ed2df478f1cf9fffa3d4af830845 to your computer and use it in GitHub Desktop.
string literal vs string array investigation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
a.out: file format elf64-x86-64 | |
Disassembly of section .init: | |
0000000000001000 <_init>: | |
1000: f3 0f 1e fa endbr64 | |
1004: 48 83 ec 08 sub rsp,0x8 | |
1008: 48 8b 05 c1 2f 00 00 mov rax,QWORD PTR [rip+0x2fc1] # 3fd0 <__gmon_start__@Base> | |
100f: 48 85 c0 test rax,rax | |
1012: 74 02 je 1016 <_init+0x16> | |
1014: ff d0 call rax | |
1016: 48 83 c4 08 add rsp,0x8 | |
101a: c3 ret | |
Disassembly of section .plt: | |
0000000000001020 <puts@plt-0x10>: | |
1020: ff 35 ca 2f 00 00 push QWORD PTR [rip+0x2fca] # 3ff0 <_GLOBAL_OFFSET_TABLE_+0x8> | |
1026: ff 25 cc 2f 00 00 jmp QWORD PTR [rip+0x2fcc] # 3ff8 <_GLOBAL_OFFSET_TABLE_+0x10> | |
102c: 0f 1f 40 00 nop DWORD PTR [rax+0x0] | |
0000000000001030 <puts@plt>: | |
1030: ff 25 ca 2f 00 00 jmp QWORD PTR [rip+0x2fca] # 4000 <puts@GLIBC_2.2.5> | |
1036: 68 00 00 00 00 push 0x0 | |
103b: e9 e0 ff ff ff jmp 1020 <_init+0x20> | |
0000000000001040 <__stack_chk_fail@plt>: | |
1040: ff 25 c2 2f 00 00 jmp QWORD PTR [rip+0x2fc2] # 4008 <__stack_chk_fail@GLIBC_2.4> | |
1046: 68 01 00 00 00 push 0x1 | |
104b: e9 d0 ff ff ff jmp 1020 <_init+0x20> | |
0000000000001050 <strdup@plt>: | |
1050: ff 25 ba 2f 00 00 jmp QWORD PTR [rip+0x2fba] # 4010 <strdup@GLIBC_2.2.5> | |
1056: 68 02 00 00 00 push 0x2 | |
105b: e9 c0 ff ff ff jmp 1020 <_init+0x20> | |
Disassembly of section .text: | |
0000000000001060 <_start>: | |
1060: f3 0f 1e fa endbr64 | |
1064: 31 ed xor ebp,ebp | |
1066: 49 89 d1 mov r9,rdx | |
1069: 5e pop rsi | |
106a: 48 89 e2 mov rdx,rsp | |
106d: 48 83 e4 f0 and rsp,0xfffffffffffffff0 | |
1071: 50 push rax | |
1072: 54 push rsp | |
1073: 45 31 c0 xor r8d,r8d | |
1076: 31 c9 xor ecx,ecx | |
1078: 48 8d 3d da 00 00 00 lea rdi,[rip+0xda] # 1159 <main> | |
107f: ff 15 3b 2f 00 00 call QWORD PTR [rip+0x2f3b] # 3fc0 <__libc_start_main@GLIBC_2.34> | |
1085: f4 hlt | |
1086: 66 2e 0f 1f 84 00 00 cs nop WORD PTR [rax+rax*1+0x0] | |
108d: 00 00 00 | |
1090: 48 8d 3d 91 2f 00 00 lea rdi,[rip+0x2f91] # 4028 <__TMC_END__> | |
1097: 48 8d 05 8a 2f 00 00 lea rax,[rip+0x2f8a] # 4028 <__TMC_END__> | |
109e: 48 39 f8 cmp rax,rdi | |
10a1: 74 15 je 10b8 <_start+0x58> | |
10a3: 48 8b 05 1e 2f 00 00 mov rax,QWORD PTR [rip+0x2f1e] # 3fc8 <_ITM_deregisterTMCloneTable@Base> | |
10aa: 48 85 c0 test rax,rax | |
10ad: 74 09 je 10b8 <_start+0x58> | |
10af: ff e0 jmp rax | |
10b1: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0] | |
10b8: c3 ret | |
10b9: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0] | |
10c0: 48 8d 3d 61 2f 00 00 lea rdi,[rip+0x2f61] # 4028 <__TMC_END__> | |
10c7: 48 8d 35 5a 2f 00 00 lea rsi,[rip+0x2f5a] # 4028 <__TMC_END__> | |
10ce: 48 29 fe sub rsi,rdi | |
10d1: 48 89 f0 mov rax,rsi | |
10d4: 48 c1 ee 3f shr rsi,0x3f | |
10d8: 48 c1 f8 03 sar rax,0x3 | |
10dc: 48 01 c6 add rsi,rax | |
10df: 48 d1 fe sar rsi,1 | |
10e2: 74 14 je 10f8 <_start+0x98> | |
10e4: 48 8b 05 ed 2e 00 00 mov rax,QWORD PTR [rip+0x2eed] # 3fd8 <_ITM_registerTMCloneTable@Base> | |
10eb: 48 85 c0 test rax,rax | |
10ee: 74 08 je 10f8 <_start+0x98> | |
10f0: ff e0 jmp rax | |
10f2: 66 0f 1f 44 00 00 nop WORD PTR [rax+rax*1+0x0] | |
10f8: c3 ret | |
10f9: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0] | |
1100: f3 0f 1e fa endbr64 | |
1104: 80 3d 1d 2f 00 00 00 cmp BYTE PTR [rip+0x2f1d],0x0 # 4028 <__TMC_END__> | |
110b: 75 33 jne 1140 <_start+0xe0> | |
110d: 55 push rbp | |
110e: 48 83 3d ca 2e 00 00 cmp QWORD PTR [rip+0x2eca],0x0 # 3fe0 <__cxa_finalize@GLIBC_2.2.5> | |
1115: 00 | |
1116: 48 89 e5 mov rbp,rsp | |
1119: 74 0d je 1128 <_start+0xc8> | |
111b: 48 8b 3d fe 2e 00 00 mov rdi,QWORD PTR [rip+0x2efe] # 4020 <__dso_handle> | |
1122: ff 15 b8 2e 00 00 call QWORD PTR [rip+0x2eb8] # 3fe0 <__cxa_finalize@GLIBC_2.2.5> | |
1128: e8 63 ff ff ff call 1090 <_start+0x30> | |
112d: c6 05 f4 2e 00 00 01 mov BYTE PTR [rip+0x2ef4],0x1 # 4028 <__TMC_END__> | |
1134: 5d pop rbp | |
1135: c3 ret | |
1136: 66 2e 0f 1f 84 00 00 cs nop WORD PTR [rax+rax*1+0x0] | |
113d: 00 00 00 | |
1140: c3 ret | |
1141: 66 66 2e 0f 1f 84 00 data16 cs nop WORD PTR [rax+rax*1+0x0] | |
1148: 00 00 00 00 | |
114c: 0f 1f 40 00 nop DWORD PTR [rax+0x0] | |
1150: f3 0f 1e fa endbr64 | |
1154: e9 67 ff ff ff jmp 10c0 <_start+0x60> | |
0000000000001159 <main>: | |
1159: 55 push rbp | |
115a: 48 89 e5 mov rbp,rsp | |
115d: 48 81 ec 30 01 00 00 sub rsp,0x130 | |
1164: 64 48 8b 04 25 28 00 mov rax,QWORD PTR fs:0x28 | |
116b: 00 00 | |
116d: 48 89 45 f8 mov QWORD PTR [rbp-0x8],rax | |
1171: 31 c0 xor eax,eax | |
1173: 48 8d 05 8e 0e 00 00 lea rax,[rip+0xe8e] # 2008 <_IO_stdin_used+0x8> | |
117a: 48 89 85 d0 fe ff ff mov QWORD PTR [rbp-0x130],rax | |
1181: 48 8b 85 d0 fe ff ff mov rax,QWORD PTR [rbp-0x130] | |
1188: 48 89 c7 mov rdi,rax | |
118b: e8 c0 fe ff ff call 1050 <strdup@plt> | |
1190: 48 89 85 d8 fe ff ff mov QWORD PTR [rbp-0x128],rax | |
1197: 48 8d 85 e0 fe ff ff lea rax,[rbp-0x120] | |
119e: 48 8d 15 7b 0e 00 00 lea rdx,[rip+0xe7b] # 2020 <_IO_stdin_used+0x20> | |
11a5: b9 21 00 00 00 mov ecx,0x21 | |
11aa: 48 89 c7 mov rdi,rax | |
11ad: 48 89 d6 mov rsi,rdx | |
11b0: f3 48 a5 rep movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi] | |
11b3: 48 89 f2 mov rdx,rsi | |
11b6: 48 89 f8 mov rax,rdi | |
11b9: 0f b7 0a movzx ecx,WORD PTR [rdx] | |
11bc: 66 89 08 mov WORD PTR [rax],cx | |
11bf: 48 8d 40 02 lea rax,[rax+0x2] | |
11c3: 48 8d 52 02 lea rdx,[rdx+0x2] | |
11c7: 0f b6 0a movzx ecx,BYTE PTR [rdx] | |
11ca: 88 08 mov BYTE PTR [rax],cl | |
11cc: c6 85 e0 fe ff ff 23 mov BYTE PTR [rbp-0x120],0x23 | |
11d3: 48 8b 85 d8 fe ff ff mov rax,QWORD PTR [rbp-0x128] | |
11da: c6 00 23 mov BYTE PTR [rax],0x23 | |
11dd: 48 8b 85 d8 fe ff ff mov rax,QWORD PTR [rbp-0x128] | |
11e4: 48 89 c7 mov rdi,rax | |
11e7: e8 44 fe ff ff call 1030 <puts@plt> | |
11ec: 48 8d 85 e0 fe ff ff lea rax,[rbp-0x120] | |
11f3: 48 89 c7 mov rdi,rax | |
11f6: e8 35 fe ff ff call 1030 <puts@plt> | |
11fb: b8 00 00 00 00 mov eax,0x0 | |
1200: 48 8b 55 f8 mov rdx,QWORD PTR [rbp-0x8] | |
1204: 64 48 2b 14 25 28 00 sub rdx,QWORD PTR fs:0x28 | |
120b: 00 00 | |
120d: 74 05 je 1214 <main+0xbb> | |
120f: e8 2c fe ff ff call 1040 <__stack_chk_fail@plt> | |
1214: c9 leave | |
1215: c3 ret | |
Disassembly of section .fini: | |
0000000000001218 <_fini>: | |
1218: f3 0f 1e fa endbr64 | |
121c: 48 83 ec 08 sub rsp,0x8 | |
1220: 48 83 c4 08 add rsp,0x8 | |
1224: c3 ret |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
a.out: file format elf64-x86-64 | |
Contents of section .rodata: | |
2000 01000200 00000000 4920616d 20612073 ........I am a s | |
2010 7472696e 67206c69 74657261 6c000000 tring literal... | |
2020 4920616d 20612073 7472696e 67206172 I am a string ar | |
2030 72617920 6c6f6f6f 6f6f6f6f 6f6f6f61 ray looooooooooa | |
2040 73646661 7364666f 6f6f6f6f 6f6f6f6f sdfasdfooooooooo | |
2050 6f6f6f6f 6c616b73 6a646669 756f7961 oooolaksjdfiuoya | |
2060 78636476 6b6c6d6e 6f6f6f6f 6f6f6f6f xcdvklmnoooooooo | |
2070 6f6f6f6f 6f6f6f6f 6f6f6f6f 6173646c ooooooooooooasdl | |
2080 66736466 6f716977 656a726b 71687765 fsdfoqiwejrkqhwe | |
2090 72686771 77656f6c 696b7268 6a616b73 rhgqweolikrhjaks | |
20a0 6c646a66 6b616c73 646a666c 6f6f6f6f ldjfkalsdjfloooo | |
20b0 6f6f6f61 73686466 616c7364 6a6b666f oooashdfalsdjkfo | |
20c0 6c697771 656f696c 6a313233 346b6c6a liwqeoilj1234klj | |
20d0 31323334 6f393061 73386466 6f6f6f6f 1234o90as8dfoooo | |
20e0 6f6f6f6f 6f6f6f6f 6f6f6f6f 6f6f6f6f oooooooooooooooo | |
20f0 6f6f6f6f 6f6f6f6f 6f6f6f6f 6f6f6f6f oooooooooooooooo | |
2100 6f6f6f6f 6f6f6f6f 6f6f6f6f 6f6f6f6f oooooooooooooooo | |
2110 6f6f6f6f 6f6f6f6f 6f6f6f6f 6f6f6f6f oooooooooooooooo | |
2120 6f6f6f6f 6f6f6f6f 6f6700 ooooooooog. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
int main(void) | |
{ | |
char *literal = "I am a string literal"; | |
char *s = strdup(literal); | |
char array[] = "I am a string array looooooooooasdfasdfooooooooooooolaksjdfiuoyaxcdvklmnooooooooooooooooooooasdlfsdfoqiwejrkqhwerhgqweolikrhjaksldjfkalsdjfloooooooashdfalsdjkfoliwqeoilj1234klj1234o90as8dfooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog"; | |
array[0] = '#'; | |
// literal[0] = '#'; | |
s[0] = '#'; | |
printf("%s\n", s); | |
printf("%s\n", array); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment