Skip to content

Instantly share code, notes, and snippets.

@hhc0null
Created March 17, 2015 14:10
Show Gist options
  • Save hhc0null/28935e8f28df3fe0aa78 to your computer and use it in GitHub Desktop.
Save hhc0null/28935e8f28df3fe0aa78 to your computer and use it in GitHub Desktop.
B-sides 2015 Own350 Glorious Modern memo
// checked
void sub_400976(arg0)
{
// Local variables.
rbp_28h;
rbp_10h;
rbp_08h;
rbp_28h = arg0;
rbp_10h = 0;
rbp_08h = 0;
rbp_14h = open("./flag.txt", O_RDONLY);
if(rbp_14h == -1) {
perror("open");
exit(EXIT_FAILURE);
}
do {
rbp_08h += read(rbp_14h, &rbp_28h[rbp_10h], 0x40-rbp_10h);
if(rbp_08h == -1) {
perror("read");
exit(EXIT_FAILURE);
}
} while(rbp_08h <= 0x40 || rbp_10h);
close(rbp_14h);
}
// checked
void sub_400a20(char *arg0)
{
rbp_08h = arg0;
puts(rbp_08h);
fflush(NULL);
}
// checked
void sub_400a44(arg0)
{
// Local variables.
rbp_28h;
char *rbp_08h;
rbp_28h = arg0;
for(rbp_08h = 0; rbp_08h < rbp_28h; rbp_08h++) {
rbp_18h = malloc(0x6e);
rbp_18h->offset_00h = 0;
rbp_18h->offset_04h = NULL;
if(bss_601f40h) {
bss_601f40h = rbp_18h;
} else {
for(rbp_10h = bss_601f40h; rbp_10h->offset_04h != NULL; rbp_10h = rbp_10h->offset_04h) {
rbp_10h = rbp_10h->offset_04h;
// ->>
}
rbp_10h->offset_04h = rbp_18h;
}
// ->>
}
}
// checked.
sub_400ada(arg0, arg1)
{
// Local variables.
rbp_30h;
rbp_28h;
rbp_18h;
for(rbp_18h = 0; rbp_18h < rbp_30h; rbp_18h++) {
read(fileno(stdin), &rbp_28h[rbp_18h], 1);
if(rbp_28h[rbp_18h] == '\n') {
rbp_28h[rbp_18h] = '\0';
break;
}
// ->>
}
rbp_28h[rbp_30h-1] = '\0';
}
// checked
int sub_400b69(arg0)
{
// Local variables.
rbp_10h;
read(fileno(stdin), &rbp_10h[0], 1);
read(fileno(stdin), &rbp_10h[1], 1);
read(fileno(stdin), &rbp_10h[2], 1);
rbp_10h[2] = '\0';
return rbp_10h;
}
// checked
sub_400bf1()
{
// Local variables.
char *rbp_40h;
memset(rbp_40h, '\0', 0x40);
sub_400ada(rbp_40h, 0x40);
return atol(rbp_40h);
}
// checked
void sub_400c2e()
{
bss_601f38h = bss_601f38h? false: true;
if(bss_601f38h) {
sub_400a20("Bjorn Stoustrup mode activated");
} else {
sub_400a20("Bjorn Stoustrup mode deactivated");
}
}
// checked
sub_400c68(arg0, arg1, arg2)
{
// Local variables.
rbp_18h;
rbp_10h;
rbp_08h;
rbp_08h = arg0;
rbp_10h = arg1;
rbp_18h = arg2;
if(bss_601f38h) {
printf("%d / %s / ", rbp_10h->offset_66h, rbp_10h->offset_0ch);
}
printf(rbp_08h, rbp_18h[rbp_10h->offset_66h * 8]);
}
// checked
void sub_400cd8(arg0)
{
// Local variables.
rbp_38h;
rbp_28h;
rbp_38h = arg0;
if(bss_601f38h) {
sub_400a20("[d] Specify padding:");
sub_400b69(rbp_30h);
if(!('0' < rbp_30h && rbp_30h <= '9') || !('0' < rbp_2fh && rbp_2fh <= '9')) {
sub_400a20("[d] Invalid padding");
} else {
rbp_1fh = (char)rbp_30h;
rbp_1eh = (char)rbp_2fh;
}
}
for(rbp_18h = bss_601f40h; rbp_18h != NULL; rbp_18h = rbp_18h->offset_04h) {
printf("[ ");
if(rbp_18h->offset_00h == NULL) {
sub_400c68(rbp_18h->offset_08h, rbp_18h, rbp_38h);
} else {
printf("undefined");
}
if(bss_601f38h) {
sub_400a20(" ]")
} else {
printf(" ]");
}
// ->>
}
sub_400a20("[d] Element at: %p\n");
}
// checked.
void sub_400dea(arg0)
{
// Local variables.
rbp_18h;
rbp_18h = arg0;
for(rbp_08h = bss_601f40h; rbp_08h != NULL; rbp_08h = rbp_08h->offset_04h) {
if(rbp_08h->offset_00h) {
if(bss_601f38h) {
printf("[d] Element at: %p\n", rbp_08h);
printf("[d] value: %ld\n", rbp_18h[rbp_08h->offset_66h * 8]);
rbp_10h += rbp_18h[rbp_08h->offset_66h * 8];
}
if(bss_601f38h) {
printf("[d] Current total: %ld\n", rbp_10h);
}
}
// ->>
}
printf("Total: %ld\n", rbp_10h);
sub_400a20("[d] Element at %p\n");
}
// checked.
int sub_400edf(arg0, arg1)
{
// Local variable.
rbp_20h;
rbp_18h;
rbp_18h = arg0;
rbp_20h = arg1;
if(bss_601f38h) {
printf("[d] \tsort a: %ld\n", rbp_08h->offset_00h);
printf("[d] \tsort b: %ld\n", rbp_10h->offset_00h);
fflush(NULL);
}
if(rbp_08h > rbp_10h) {
return 1;
} else
if(rbp_08h < rbp_10h) {
return -1;
} else {
return 0;
}
}
// checked
void sub_400f6e(arg0)
{
// Local variables.
rbp_08h;
if(bss_601f38h) {
sub_400a20("[d] sorting array...");
}
qsort(rbp_08h, 0x10, 8, sub_400edf);
}
// checked.
void sub_400fab(arg0, arg1, arg2)
{
// Local variables.
rbp_c8h;
rbp_c0h;
rbp_b8h;
rbp_40h;
rbp_b8h = arg0;
rbp_c0h = arg1;
rbp_c8h = arg2;
rbp_14h = 0;
rbp_40h = "%00s";
memset(rbp_b0h, '\0', 0x5a);
rbp_24h = atoi(rbp_b0h->offset_08h + 4);
if(rbp_c8h->offset_00h > 0x10) {
sub_400a20("Red black tree list full!");
return;
}
if(!(0 <= rbp_24h && rbp_24h < 0x10)) {
return;
}
for(rbp_20h = bss_601f40h; rbp_14h < rbp_24h; rbp_20h = rbp_20h->offset_04h) {
rbp_14h++;
}
if(rbp_20h->offset_00h) {
sub_400a20("Element already exists.");
return;
}
sub_400a20("Value for the new element");
rbp_30h = sub_400bf1();
if(bss_601f38h) {
sub_400a20();
*rbp_50h = sub_400b69();
if(!('0' <= rbp_50h && rbp_50h <= '9') && !('0' <= rbp_4fh && rbp_4fh <= '9')) {
sub_400a20("[d] Invalid pading");
} else {
rbp_3fh = rbp_50h;
rbp_3eh = rbp_4fh;
}
sub_400a20("Optional note for the new element:");
sub_400ada(rbp_b0h, 0x5a);
}
if(bss_601f38h) {
printf("[d] List head at: %p\n", bss_601f40h);
fflush(NULL);
}
rbp_20h->offset_00h = 1;
rbp_20h->offset_66h = (long)rbp_c8h->offset_00h;
rbp_c0h[rbp_c8h->offset_00h * 8] = rbp_30h;
sprintf(rbp_20h->offset_0ch, rbp_40h, rbp_b0h);
if(bss_601f38h) {
printf("[d] New Element at: %p\n", rbp-20h);
fflush(NULL);
}
}
void sub_4011f5(arg0, arg1, arg2)
{
sub_400a20("Sorry, the compiler didn't support this feature.");
sub_400a20("Please wait until C++16 is standardized.");
}
sub_40121f(arg0, arg1);
{
// Local variables.
char *rbp_60h;
char *rbp_58h;
int rbp_04h;
rbp_58h = arg0;
rbp_60h = arg1;
rbp_04h = 0;
memset(rbp_50h, '\0', 0x40);
while(true) {
printf("> ");
fflush(NULL);
sub_400ada(rbp_50h, 0x40);
if(bss_601f38h) {
printf("[d] Command: %s\n");
fflush(NULL);
}
if(strstr(rbp_50h, "debug")) {
sub_400c2e();
} else
if(strstr(rbp_50h, "print")) {
sub_400cd8(rbp_58h);
} else
if(strstr(rbp_50h, "total")) {
sub_400dea(rbp_58h);
} else
if(strstr(rbp_50h, "sort")) {
sub_400f6e(rbp_58h);
} else
if(strstr(rbp_50h, "add")) {
sub_400fab(rbp_50h, rbp_58h, rbp_60h);
} else
if(strstr(rbp_50h, "del")) {
sub_4011f5(rbp_50h, rbp_58h, rbp_60h);
} else
if(strstr(rbp_50h, "quit")) {
rbp_04h = 1;
}
if(!rbp_04h) {
return;
}
}
}
void main()
{
// Local variables.
int rbp_c4h;
char rbp_c0h[];
rbp_c4h = 0;
sub_400976(rbp_c0h);
sub_400a44(0x10);
memset(rbp_80h, '\0', 0x80);
sub_400a20("Welcome to Glorious Modern C++ 15");
sub_400a20("\0");
sub_400a20("As part of the C++ 15 standard, we have overhauled arrays so they");
sub_400a20("provide a Network Interface Impl for remote usage. Sticking with");
sub_400a20("earlier C++ standards, we have added --omg-optimized and backed it");
sub_400a20("with a red black vector list tree for extra reduced complexity and");
sub_400a20("succinct error message.");
sub_400a20("\0");
sub_40121f(rbp_80h, rbp_c4h);
exit(0);
}
// readed
void sub_400976(arg0)
{
400976: 55 push %rbp
400977: 48 89 e5 mov %rsp,%rbp
40097a: 48 83 ec 30 sub $0x30,%rsp
// Local variables.
rbp_28h;
rbp_10h;
rbp_08h;
40097e: 48 89 7d d8 mov %rdi,-0x28(%rbp)
rbp_28h = arg0;
400982: 48 c7 45 f0 00 00 00 movq $0x0,-0x10(%rbp)
400989: 00
rbp_10h = 0;
40098a: 48 c7 45 f8 00 00 00 movq $0x0,-0x8(%rbp)
400991: 00
rbp_08h = 0;
400992: be 00 00 00 00 mov $0x0,%esi
400997: bf 08 15 40 00 mov $0x401508,%edi
40099c: b8 00 00 00 00 mov $0x0,%eax
4009a1: e8 7a fe ff ff callq 400820 <open@plt>
4009a6: 89 45 ec mov %eax,-0x14(%rbp)
rbp_14h = open("./flag.txt", O_RDONLY);
4009a9: 83 7d ec ff cmpl $0xffffffff,-0x14(%rbp)
4009ad: 75 14 jne 4009c3 <strstr@plt+0x153>
if(rbp_14h == -1) {
4009af: bf 13 15 40 00 mov $0x401513,%edi
4009b4: e8 77 fe ff ff callq 400830 <perror@plt>
perror("open");
4009b9: bf 01 00 00 00 mov $0x1,%edi
4009be: e8 9d fe ff ff callq 400860 <exit@plt>
exit(EXIT_FAILURE);
}
do {
4009c3: b8 40 00 00 00 mov $0x40,%eax
4009c8: 48 2b 45 f0 sub -0x10(%rbp),%rax
4009cc: 48 89 c2 mov %rax,%rdx
4009cf: 48 8b 4d d8 mov -0x28(%rbp),%rcx
4009d3: 48 8b 45 f0 mov -0x10(%rbp),%rax
4009d7: 48 01 c1 add %rax,%rcx
4009da: 8b 45 ec mov -0x14(%rbp),%eax
4009dd: 48 89 ce mov %rcx,%rsi
4009e0: 89 c7 mov %eax,%edi
4009e2: e8 c9 fd ff ff callq 4007b0 <read@plt>
4009e7: 48 01 45 f8 add %rax,-0x8(%rbp)
rbp_08h += read(rbp_14h, &rbp_28h[rbp_10h], 0x40-rbp_10h);
4009eb: 48 83 7d f0 ff cmpq $0xffffffffffffffff,-0x10(%rbp)
4009f0: 75 14 jne 400a06 <strstr@plt+0x196>
if(rbp_08h == -1) {
4009f2: bf 18 15 40 00 mov $0x401518,%edi
4009f7: e8 34 fe ff ff callq 400830 <perror@plt>
perror("read");
4009fc: bf 01 00 00 00 mov $0x1,%edi
400a01: e8 5a fe ff ff callq 400860 <exit@plt>
exit(EXIT_FAILURE);
}
400a06: 48 83 7d f8 3f cmpq $0x3f,-0x8(%rbp)
400a0b: 77 07 ja 400a14 <strstr@plt+0x1a4>
400a0d: 48 83 7d f0 00 cmpq $0x0,-0x10(%rbp)
400a12: 75 af jne 4009c3 <strstr@plt+0x153>
} while(rbp_08h <= 0x40 || rbp_10h);
400a14: 8b 45 ec mov -0x14(%rbp),%eax
400a17: 89 c7 mov %eax,%edi
400a19: e8 82 fd ff ff callq 4007a0 <close@plt>
close(rbp_14h);
400a1e: c9 leaveq
400a1f: c3 retq
}
// readed
void sub_400a20(char *arg0)
{
400a20: 55 push %rbp
400a21: 48 89 e5 mov %rsp,%rbp
400a24: 48 83 ec 10 sub $0x10,%rsp
400a28: 48 89 7d f8 mov %rdi,-0x8(%rbp)
rbp_08h = arg0;
400a2c: 48 8b 45 f8 mov -0x8(%rbp),%rax
400a30: 48 89 c7 mov %rax,%rdi
400a33: e8 28 fd ff ff callq 400760 <puts@plt>
puts(rbp_08h);
400a38: bf 00 00 00 00 mov $0x0,%edi
400a3d: e8 be fd ff ff callq 400800 <fflush@plt>
fflush(NULL);
400a42: c9 leaveq
400a43: c3 retq
}
// readed
void sub_400a44(arg0)
{
400a44: 55 push %rbp
400a45: 48 89 e5 mov %rsp,%rbp
400a48: 48 83 ec 30 sub $0x30,%rsp
// Local variables.
rbp_28h;
char *rbp_08h;
400a4c: 48 89 7d d8 mov %rdi,-0x28(%rbp)
rbp_28h = arg0;
400a50: 48 c7 45 f8 00 00 00 movq $0x0,-0x8(%rbp)
400a57: 00
400a58: eb 74 jmp 400ace <strstr@plt+0x25e>
for(rbp_08h = 0; rbp_08h < rbp_28h; rbp_08h++) {
400a5a: bf 6e 00 00 00 mov $0x6e,%edi
400a5f: e8 8c fd ff ff callq 4007f0 <malloc@plt>
400a64: 48 89 45 e8 mov %rax,-0x18(%rbp)
rbp_18h = malloc(0x6e);
400a68: 48 8b 45 e8 mov -0x18(%rbp),%rax
400a6c: c7 00 00 00 00 00 movl $0x0,(%rax)
rbp_18h->offset_00h = 0;
400a72: 48 8b 45 e8 mov -0x18(%rbp),%rax
400a76: 48 c7 40 04 00 00 00 movq $0x0,0x4(%rax)
rbp_18h->offset_04h = NULL;
400a7d: 00
400a7e: 48 8b 05 bb 14 20 00 mov 0x2014bb(%rip),%rax # 601f40 <stdin+0x18>
400a85: 48 85 c0 test %rax,%rax
400a88: 75 0d jne 400a97 <strstr@plt+0x227>
if(bss_601f40h) {
400a8a: 48 8b 45 e8 mov -0x18(%rbp),%rax
400a8e: 48 89 05 ab 14 20 00 mov %rax,0x2014ab(%rip) # 601f40 <stdin+0x18>
bss_601f40h = rbp_18h;
400a95: eb 32 jmp 400ac9 <strstr@plt+0x259>
} else {
400a97: 48 8b 05 a2 14 20 00 mov 0x2014a2(%rip),%rax # 601f40 <stdin+0x18>
400a9e: 48 89 45 f0 mov %rax,-0x10(%rbp)
400aa2: eb 0c jmp 400ab0 <strstr@plt+0x240>
for(rbp_10h = bss_601f40h; rbp_10h->offset_04h != NULL; rbp_10h = rbp_10h->offset_04h) {
400aa4: 48 8b 45 f0 mov -0x10(%rbp),%rax
400aa8: 48 8b 40 04 mov 0x4(%rax),%rax
400aac: 48 89 45 f0 mov %rax,-0x10(%rbp)
rbp_10h = rbp_10h->offset_04h;
// ->>
400ab0: 48 8b 45 f0 mov -0x10(%rbp),%rax
400ab4: 48 8b 40 04 mov 0x4(%rax),%rax
400ab8: 48 85 c0 test %rax,%rax
400abb: 75 e7 jne 400aa4 <strstr@plt+0x234>
}
400abd: 48 8b 45 f0 mov -0x10(%rbp),%rax
400ac1: 48 8b 55 e8 mov -0x18(%rbp),%rdx
400ac5: 48 89 50 04 mov %rdx,0x4(%rax)
rbp_10h->offset_04h = rbp_18h;
}
400ac9: 48 83 45 f8 01 addq $0x1,-0x8(%rbp)
// ->>
400ace: 48 8b 45 f8 mov -0x8(%rbp),%rax
400ad2: 48 3b 45 d8 cmp -0x28(%rbp),%rax
400ad6: 72 82 jb 400a5a <strstr@plt+0x1ea>
}
400ad8: c9 leaveq
400ad9: c3 retq
}
// readed.
sub_400ada(arg0, arg1)
{
400ada: 55 push %rbp
400adb: 48 89 e5 mov %rsp,%rbp
400ade: 53 push %rbx
400adf: 48 83 ec 28 sub $0x28,%rsp
// Local variables.
rbp_30h;
rbp_28h;
rbp_18h;
400ae3: 48 89 7d d8 mov %rdi,-0x28(%rbp)
400ae7: 48 89 75 d0 mov %rsi,-0x30(%rbp)
400aeb: 48 c7 45 e8 00 00 00 movq $0x0,-0x18(%rbp)
400af2: 00
400af3: eb 51 jmp 400b46 <strstr@plt+0x2d6>
for(rbp_18h = 0; rbp_18h < rbp_30h; rbp_18h++) {
400af5: 48 8b 55 d8 mov -0x28(%rbp),%rdx
400af9: 48 8b 45 e8 mov -0x18(%rbp),%rax
400afd: 48 8d 1c 02 lea (%rdx,%rax,1),%rbx
400b01: 48 8b 05 20 14 20 00 mov 0x201420(%rip),%rax # 601f28 <stdin>
400b08: 48 89 c7 mov %rax,%rdi
400b0b: e8 d0 fc ff ff callq 4007e0 <fileno@plt>
400b10: ba 01 00 00 00 mov $0x1,%edx
400b15: 48 89 de mov %rbx,%rsi
400b18: 89 c7 mov %eax,%edi
400b1a: e8 91 fc ff ff callq 4007b0 <read@plt>
read(fileno(stdin), &rbp_28h[rbp_18h], 1);
400b1f: 48 8b 55 d8 mov -0x28(%rbp),%rdx
400b23: 48 8b 45 e8 mov -0x18(%rbp),%rax
400b27: 48 01 d0 add %rdx,%rax
400b2a: 0f b6 00 movzbl (%rax),%eax
400b2d: 3c 0a cmp $0xa,%al
400b2f: 75 10 jne 400b41 <strstr@plt+0x2d1>
if(rbp_28h[rbp_18h] == '\n') {
400b31: 48 8b 55 d8 mov -0x28(%rbp),%rdx
400b35: 48 8b 45 e8 mov -0x18(%rbp),%rax
400b39: 48 01 d0 add %rdx,%rax
400b3c: c6 00 00 movb $0x0,(%rax)
rbp_28h[rbp_18h] = '\0';
400b3f: eb 0f jmp 400b50 <strstr@plt+0x2e0>
break;
}
400b41: 48 83 45 e8 01 addq $0x1,-0x18(%rbp)
400b46: 48 8b 45 e8 mov -0x18(%rbp),%rax
// ->>
400b4a: 48 3b 45 d0 cmp -0x30(%rbp),%rax
400b4e: 72 a5 jb 400af5 <strstr@plt+0x285>
}
400b50: 48 8b 45 d0 mov -0x30(%rbp),%rax
400b54: 48 8d 50 ff lea -0x1(%rax),%rdx
400b58: 48 8b 45 d8 mov -0x28(%rbp),%rax
400b5c: 48 01 d0 add %rdx,%rax
400b5f: c6 00 00 movb $0x0,(%rax)
rbp_28h[rbp_30h-1] = '\0';
400b62: 48 83 c4 28 add $0x28,%rsp
400b66: 5b pop %rbx
400b67: 5d pop %rbp
400b68: c3 retq
}
// readed
int sub_400b69(arg0)
{
400b69: 55 push %rbp
400b6a: 48 89 e5 mov %rsp,%rbp
400b6d: 48 83 ec 10 sub $0x10,%rsp
// Local variables.
rbp_10h;
400b71: 48 8b 05 b0 13 20 00 mov 0x2013b0(%rip),%rax # 601f28 <stdin>
400b78: 48 89 c7 mov %rax,%rdi
400b7b: e8 60 fc ff ff callq 4007e0 <fileno@plt>
400b80: 89 c1 mov %eax,%ecx
400b82: 48 8d 45 f0 lea -0x10(%rbp),%rax
400b86: ba 01 00 00 00 mov $0x1,%edx
400b8b: 48 89 c6 mov %rax,%rsi
400b8e: 89 cf mov %ecx,%edi
400b90: e8 1b fc ff ff callq 4007b0 <read@plt>
read(fileno(stdin), &rbp_10h[0], 1);
400b95: 48 8b 05 8c 13 20 00 mov 0x20138c(%rip),%rax # 601f28 <stdin>
400b9c: 48 89 c7 mov %rax,%rdi
400b9f: e8 3c fc ff ff callq 4007e0 <fileno@plt>
400ba4: 89 c1 mov %eax,%ecx
400ba6: 48 8d 45 f0 lea -0x10(%rbp),%rax
400baa: 48 83 c0 01 add $0x1,%rax
400bae: ba 01 00 00 00 mov $0x1,%edx
400bb3: 48 89 c6 mov %rax,%rsi
400bb6: 89 cf mov %ecx,%edi
400bb8: e8 f3 fb ff ff callq 4007b0 <read@plt>
read(fileno(stdin), &rbp_10h[1], 1);
400bbd: 48 8b 05 64 13 20 00 mov 0x201364(%rip),%rax # 601f28 <stdin>
400bc4: 48 89 c7 mov %rax,%rdi
400bc7: e8 14 fc ff ff callq 4007e0 <fileno@plt>
400bcc: 89 c1 mov %eax,%ecx
400bce: 48 8d 45 f0 lea -0x10(%rbp),%rax
400bd2: 48 83 c0 02 add $0x2,%rax
400bd6: ba 01 00 00 00 mov $0x1,%edx
400bdb: 48 89 c6 mov %rax,%rsi
400bde: 89 cf mov %ecx,%edi
400be0: e8 cb fb ff ff callq 4007b0 <read@plt>
read(fileno(stdin), &rbp_10h[2], 1);
400be5: c6 45 f2 00 movb $0x0,-0xe(%rbp)
rbp_10h[2] = '\0';
400be9: 48 8d 45 f0 lea -0x10(%rbp),%rax
400bed: 8b 00 mov (%rax),%eax
400bef: c9 leaveq
400bf0: c3 retq
return rbp_10h;
}
// readed
sub_400bf1()
{
400bf1: 55 push %rbp
400bf2: 48 89 e5 mov %rsp,%rbp
400bf5: 48 83 ec 40 sub $0x40,%rsp
// Local variables.
char *rbp_40h;
400bf9: 48 8d 45 c0 lea -0x40(%rbp),%rax
400bfd: ba 40 00 00 00 mov $0x40,%edx
400c02: be 00 00 00 00 mov $0x0,%esi
400c07: 48 89 c7 mov %rax,%rdi
400c0a: e8 81 fb ff ff callq 400790 <memset@plt>
memset(rbp_40h, '\0', 0x40);
400c0f: 48 8d 45 c0 lea -0x40(%rbp),%rax
400c13: be 40 00 00 00 mov $0x40,%esi
400c18: 48 89 c7 mov %rax,%rdi
400c1b: e8 ba fe ff ff callq 400ada <strstr@plt+0x26a>
sub_400ada(rbp_40h, 0x40);
400c20: 48 8d 45 c0 lea -0x40(%rbp),%rax
400c24: 48 89 c7 mov %rax,%rdi
400c27: e8 e4 fb ff ff callq 400810 <atol@plt>
400c2c: c9 leaveq
400c2d: c3 retq
return atol(rbp_40h);
}
// readed
void sub_400c2e()
{
400c2e: 55 push %rbp
400c2f: 48 89 e5 mov %rsp,%rbp
400c32: 8b 05 00 13 20 00 mov 0x201300(%rip),%eax # 601f38 <stdin+0x10>
400c38: 85 c0 test %eax,%eax
400c3a: 0f 94 c0 sete %al
400c3d: 0f b6 c0 movzbl %al,%eax
400c40: 89 05 f2 12 20 00 mov %eax,0x2012f2(%rip) # 601f38 <stdin+0x10>
bss_601f38h = bss_601f38h? false: true;
400c46: 8b 05 ec 12 20 00 mov 0x2012ec(%rip),%eax # 601f38 <stdin+0x10>
400c4c: 85 c0 test %eax,%eax
400c4e: 74 0c je 400c5c <strstr@plt+0x3ec>
if(bss_601f38h) {
400c50: bf 20 15 40 00 mov $0x401520,%edi
400c55: e8 c6 fd ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Bjorn Stoustrup mode activated");
} else {
400c5a: eb 0a jmp 400c66 <strstr@plt+0x3f6>
400c5c: bf 40 15 40 00 mov $0x401540,%edi
400c61: e8 ba fd ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Bjorn Stoustrup mode deactivated");
}
400c66: 5d pop %rbp
400c67: c3 retq
}
// readed
sub_400c68(arg0, arg1, arg2)
{
400c68: 55 push %rbp
400c69: 48 89 e5 mov %rsp,%rbp
400c6c: 48 83 ec 20 sub $0x20,%rsp
// Local variables.
rbp_18h;
rbp_10h;
rbp_08h;
400c70: 48 89 7d f8 mov %rdi,-0x8(%rbp)
rbp_08h = arg0;
400c74: 48 89 75 f0 mov %rsi,-0x10(%rbp)
rbp_10h = arg1;
400c78: 48 89 55 e8 mov %rdx,-0x18(%rbp)
rbp_18h = arg2;
400c7c: 8b 05 b6 12 20 00 mov 0x2012b6(%rip),%eax # 601f38 <stdin+0x10>
400c82: 85 c0 test %eax,%eax
400c84: 74 22 je 400ca8 <strstr@plt+0x438>
if(bss_601f38h) {
400c86: 48 8b 45 f0 mov -0x10(%rbp),%rax
400c8a: 48 8d 50 0c lea 0xc(%rax),%rdx
400c8e: 48 8b 45 f0 mov -0x10(%rbp),%rax
400c92: 48 8b 40 66 mov 0x66(%rax),%rax
400c96: 48 89 c6 mov %rax,%rsi
400c99: bf 61 15 40 00 mov $0x401561,%edi
400c9e: b8 00 00 00 00 mov $0x0,%eax
400ca3: e8 d8 fa ff ff callq 400780 <printf@plt>
printf("%d / %s / ", rbp_10h->offset_66h, rbp_10h->offset_0ch);
}
400ca8: 48 8b 45 f0 mov -0x10(%rbp),%rax
400cac: 48 8b 40 66 mov 0x66(%rax),%rax
400cb0: 48 8d 14 c5 00 00 00 lea 0x0(,%rax,8),%rdx
400cb7: 00
400cb8: 48 8b 45 e8 mov -0x18(%rbp),%rax
400cbc: 48 01 d0 add %rdx,%rax
400cbf: 48 8b 10 mov (%rax),%rdx
400cc2: 48 8b 45 f8 mov -0x8(%rbp),%rax
400cc6: 48 89 d6 mov %rdx,%rsi
400cc9: 48 89 c7 mov %rax,%rdi
400ccc: b8 00 00 00 00 mov $0x0,%eax
400cd1: e8 aa fa ff ff callq 400780 <printf@plt>
printf(rbp_08h, rbp_18h[rbp_10h->offset_66h * 8]);
400cd6: c9 leaveq
400cd7: c3 retq
}
// readed
void sub_400cd8(arg0)
{
400cd8: 55 push %rbp
400cd9: 48 89 e5 mov %rsp,%rbp
400cdc: 53 push %rbx
400cdd: 48 83 ec 38 sub $0x38,%rsp
// Local variables.
rbp_38h;
rbp_28h;
400ce1: 48 89 7d c8 mov %rdi,-0x38(%rbp)
rbp_38h = arg0;
400ce5: 48 8d 45 e0 lea -0x20(%rbp),%rax
400ce9: c7 00 25 30 30 6c movl $0x6c303025,(%rax)
400cef: 66 c7 40 04 64 00 movw $0x64,0x4(%rax)
400cf5: 8b 05 3d 12 20 00 mov 0x20123d(%rip),%eax # 601f38 <stdin+0x10>
400cfb: 85 c0 test %eax,%eax
400cfd: 74 54 je 400d53 <strstr@plt+0x4e3>
if(bss_601f38h) {
400cff: bf 6c 15 40 00 mov $0x40156c,%edi
400d04: e8 17 fd ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("[d] Specify padding:");
400d09: 48 8d 5d d0 lea -0x30(%rbp),%rbx
400d0d: b8 00 00 00 00 mov $0x0,%eax
400d12: e8 52 fe ff ff callq 400b69 <strstr@plt+0x2f9>
sub_400b69(rbp_30h);
400d17: 89 03 mov %eax,(%rbx)
400d19: 0f b6 45 d0 movzbl -0x30(%rbp),%eax
400d1d: 3c 2f cmp $0x2f,%al
400d1f: 7e 18 jle 400d39 <strstr@plt+0x4c9>
400d21: 0f b6 45 d0 movzbl -0x30(%rbp),%eax
400d25: 3c 39 cmp $0x39,%al
400d27: 7f 10 jg 400d39 <strstr@plt+0x4c9>
400d29: 0f b6 45 d1 movzbl -0x2f(%rbp),%eax
400d2d: 3c 2f cmp $0x2f,%al
400d2f: 7e 08 jle 400d39 <strstr@plt+0x4c9>
400d31: 0f b6 45 d1 movzbl -0x2f(%rbp),%eax
400d35: 3c 39 cmp $0x39,%al
400d37: 7e 0c jle 400d45 <strstr@plt+0x4d5>
if(!('0' < rbp_30h && rbp_30h <= '9') || !('0' < rbp_2fh && rbp_2fh <= '9')) {
400d39: bf 81 15 40 00 mov $0x401581,%edi
400d3e: e8 dd fc ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("[d] Invalid padding");
400d43: eb 0e jmp 400d53 <strstr@plt+0x4e3>
} else {
400d45: 0f b6 45 d0 movzbl -0x30(%rbp),%eax
400d49: 88 45 e1 mov %al,-0x1f(%rbp)
rbp_1fh = (char)rbp_30h;
400d4c: 0f b6 45 d1 movzbl -0x2f(%rbp),%eax
400d50: 88 45 e2 mov %al,-0x1e(%rbp)
rbp_1eh = (char)rbp_2fh;
}
}
400d53: 48 8b 05 e6 11 20 00 mov 0x2011e6(%rip),%rax # 601f40 <stdin+0x18>
400d5a: 48 89 45 e8 mov %rax,-0x18(%rbp)
400d5e: eb 72 jmp 400dd2 <strstr@plt+0x562>
for(rbp_18h = bss_601f40h; rbp_18h != NULL; rbp_18h = rbp_18h->offset_04h) {
400d60: bf 95 15 40 00 mov $0x401595,%edi
400d65: b8 00 00 00 00 mov $0x0,%eax
400d6a: e8 11 fa ff ff callq 400780 <printf@plt>
printf("[ ");
400d6f: 48 8b 45 e8 mov -0x18(%rbp),%rax
400d73: 8b 00 mov (%rax),%eax
400d75: 85 c0 test %eax,%eax
400d77: 74 19 je 400d92 <strstr@plt+0x522>
if(rbp_18h->offset_00h == NULL) {
400d79: 48 8b 55 c8 mov -0x38(%rbp),%rdx
400d7d: 48 8b 4d e8 mov -0x18(%rbp),%rcx
400d81: 48 8d 45 e0 lea -0x20(%rbp),%rax
400d85: 48 89 ce mov %rcx,%rsi
400d88: 48 89 c7 mov %rax,%rdi
400d8b: e8 d8 fe ff ff callq 400c68 <strstr@plt+0x3f8>
sub_400c68(rbp_18h->offset_08h, rbp_18h, rbp_38h);
400d90: eb 0f jmp 400da1 <strstr@plt+0x531>
} else {
400d92: bf 98 15 40 00 mov $0x401598,%edi
400d97: b8 00 00 00 00 mov $0x0,%eax
400d9c: e8 df f9 ff ff callq 400780 <printf@plt>
printf("undefined");
}
400da1: 8b 05 91 11 20 00 mov 0x201191(%rip),%eax # 601f38 <stdin+0x10>
400da7: 85 c0 test %eax,%eax
400da9: 74 0c je 400db7 <strstr@plt+0x547>
if(bss_601f38h) {
400dab: bf a2 15 40 00 mov $0x4015a2,%edi
400db0: e8 6b fc ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20(" ]")
400db5: eb 0f jmp 400dc6 <strstr@plt+0x556>
} else {
400db7: bf a2 15 40 00 mov $0x4015a2,%edi
400dbc: b8 00 00 00 00 mov $0x0,%eax
400dc1: e8 ba f9 ff ff callq 400780 <printf@plt>
printf(" ]");
}
400dc6: 48 8b 45 e8 mov -0x18(%rbp),%rax
400dca: 48 8b 40 04 mov 0x4(%rax),%rax
400dce: 48 89 45 e8 mov %rax,-0x18(%rbp)
// ->>
400dd2: 48 83 7d e8 00 cmpq $0x0,-0x18(%rbp)
400dd7: 75 87 jne 400d60 <strstr@plt+0x4f0>
}
400dd9: bf a5 15 40 00 mov $0x4015a5,%edi
400dde: e8 3d fc ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("[d] Element at: %p\n");
400de3: 48 83 c4 38 add $0x38,%rsp
400de7: 5b pop %rbx
400de8: 5d pop %rbp
400de9: c3 retq
}
// readed.
void sub_400dea(arg0)
{
400dea: 55 push %rbp
400deb: 48 89 e5 mov %rsp,%rbp
400dee: 48 83 ec 20 sub $0x20,%rsp
// Local variables.
rbp_18h;
400df2: 48 89 7d e8 mov %rdi,-0x18(%rbp)
rbp_18h = arg0;
400df6: 48 8b 05 43 11 20 00 mov 0x201143(%rip),%rax # 601f40 <stdin+0x18>
400dfd: 48 89 45 f8 mov %rax,-0x8(%rbp)
400e01: 48 c7 45 f0 00 00 00 movq $0x0,-0x10(%rbp)
400e08: 00
400e09: e9 a4 00 00 00 jmpq 400eb2 <strstr@plt+0x642>
for(rbp_08h = bss_601f40h; rbp_08h != NULL; rbp_08h = rbp_08h->offset_04h) {
400e0e: 48 8b 45 f8 mov -0x8(%rbp),%rax
400e12: 8b 00 mov (%rax),%eax
400e14: 85 c0 test %eax,%eax
400e16: 0f 84 8a 00 00 00 je 400ea6 <strstr@plt+0x636>
if(rbp_08h->offset_00h) {
400e1c: 8b 05 16 11 20 00 mov 0x201116(%rip),%eax # 601f38 <stdin+0x10>
400e22: 85 c0 test %eax,%eax
400e24: 74 42 je 400e68 <strstr@plt+0x5f8>
if(bss_601f38h) {
400e26: 48 8b 45 f8 mov -0x8(%rbp),%rax
400e2a: 48 89 c6 mov %rax,%rsi
400e2d: bf a6 15 40 00 mov $0x4015a6,%edi
400e32: b8 00 00 00 00 mov $0x0,%eax
400e37: e8 44 f9 ff ff callq 400780 <printf@plt>
printf("[d] Element at: %p\n", rbp_08h);
400e3c: 48 8b 45 f8 mov -0x8(%rbp),%rax
400e40: 48 8b 40 66 mov 0x66(%rax),%rax
400e44: 48 8d 14 c5 00 00 00 lea 0x0(,%rax,8),%rdx
400e4b: 00
400e4c: 48 8b 45 e8 mov -0x18(%rbp),%rax
400e50: 48 01 d0 add %rdx,%rax
400e53: 48 8b 00 mov (%rax),%rax
400e56: 48 89 c6 mov %rax,%rsi
400e59: bf ba 15 40 00 mov $0x4015ba,%edi
400e5e: b8 00 00 00 00 mov $0x0,%eax
400e63: e8 18 f9 ff ff callq 400780 <printf@plt>
printf("[d] value: %ld\n", rbp_18h[rbp_08h->offset_66h * 8]);
400e68: 48 8b 45 f8 mov -0x8(%rbp),%rax
400e6c: 48 8b 40 66 mov 0x66(%rax),%rax
400e70: 48 8d 14 c5 00 00 00 lea 0x0(,%rax,8),%rdx
400e77: 00
400e78: 48 8b 45 e8 mov -0x18(%rbp),%rax
400e7c: 48 01 d0 add %rdx,%rax
400e7f: 48 8b 00 mov (%rax),%rax
400e82: 48 01 45 f0 add %rax,-0x10(%rbp)
rbp_10h += rbp_18h[rbp_08h->offset_66h * 8];
}
400e86: 8b 05 ac 10 20 00 mov 0x2010ac(%rip),%eax # 601f38 <stdin+0x10>
400e8c: 85 c0 test %eax,%eax
400e8e: 74 16 je 400ea6 <strstr@plt+0x636>
if(bss_601f38h) {
400e90: 48 8b 45 f0 mov -0x10(%rbp),%rax
400e94: 48 89 c6 mov %rax,%rsi
400e97: bf ca 15 40 00 mov $0x4015ca,%edi
400e9c: b8 00 00 00 00 mov $0x0,%eax
400ea1: e8 da f8 ff ff callq 400780 <printf@plt>
printf("[d] Current total: %ld\n", rbp_10h);
}
}
400ea6: 48 8b 45 f8 mov -0x8(%rbp),%rax
400eaa: 48 8b 40 04 mov 0x4(%rax),%rax
400eae: 48 89 45 f8 mov %rax,-0x8(%rbp)
// ->>
400eb2: 48 83 7d f8 00 cmpq $0x0,-0x8(%rbp)
400eb7: 0f 85 51 ff ff ff jne 400e0e <strstr@plt+0x59e>
}
400ebd: 48 8b 45 f0 mov -0x10(%rbp),%rax
400ec1: 48 89 c6 mov %rax,%rsi
400ec4: bf e2 15 40 00 mov $0x4015e2,%edi
400ec9: b8 00 00 00 00 mov $0x0,%eax
400ece: e8 ad f8 ff ff callq 400780 <printf@plt>
printf("Total: %ld\n", rbp_10h);
400ed3: bf a5 15 40 00 mov $0x4015a5,%edi
400ed8: e8 43 fb ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("[d] Element at %p\n");
400edd: c9 leaveq
400ede: c3 retq
}
// readed.
int sub_400edf(arg0, arg1)
{
400edf: 55 push %rbp
400ee0: 48 89 e5 mov %rsp,%rbp
400ee3: 48 83 ec 20 sub $0x20,%rsp
// Local variable.
rbp_20h;
rbp_18h;
400ee7: 48 89 7d e8 mov %rdi,-0x18(%rbp)
rbp_18h = arg0;
400eeb: 48 89 75 e0 mov %rsi,-0x20(%rbp)
rbp_20h = arg1;
400eef: 48 8b 45 e8 mov -0x18(%rbp),%rax
400ef3: 48 89 45 f8 mov %rax,-0x8(%rbp)
400ef7: 48 8b 45 e0 mov -0x20(%rbp),%rax
400efb: 48 89 45 f0 mov %rax,-0x10(%rbp)
400eff: 8b 05 33 10 20 00 mov 0x201033(%rip),%eax # 601f38 <stdin+0x10>
400f05: 85 c0 test %eax,%eax
400f07: 74 3c je 400f45 <strstr@plt+0x6d5>
if(bss_601f38h) {
400f09: 48 8b 45 f8 mov -0x8(%rbp),%rax
400f0d: 48 8b 00 mov (%rax),%rax
400f10: 48 89 c6 mov %rax,%rsi
400f13: bf ee 15 40 00 mov $0x4015ee,%edi
400f18: b8 00 00 00 00 mov $0x0,%eax
400f1d: e8 5e f8 ff ff callq 400780 <printf@plt>
printf("[d] \tsort a: %ld\n", rbp_08h->offset_00h);
400f22: 48 8b 45 f0 mov -0x10(%rbp),%rax
400f26: 48 8b 00 mov (%rax),%rax
400f29: 48 89 c6 mov %rax,%rsi
400f2c: bf 00 16 40 00 mov $0x401600,%edi
400f31: b8 00 00 00 00 mov $0x0,%eax
400f36: e8 45 f8 ff ff callq 400780 <printf@plt>
printf("[d] \tsort b: %ld\n", rbp_10h->offset_00h);
400f3b: bf 00 00 00 00 mov $0x0,%edi
400f40: e8 bb f8 ff ff callq 400800 <fflush@plt>
fflush(NULL);
}
400f45: 48 8b 45 f8 mov -0x8(%rbp),%rax
400f49: 48 3b 45 f0 cmp -0x10(%rbp),%rax
400f4d: 76 07 jbe 400f56 <strstr@plt+0x6e6>
if(rbp_08h > rbp_10h) {
400f4f: b8 01 00 00 00 mov $0x1,%eax
400f54: eb 16 jmp 400f6c <strstr@plt+0x6fc>
return 1;
} else
400f56: 48 8b 45 f8 mov -0x8(%rbp),%rax
400f5a: 48 3b 45 f0 cmp -0x10(%rbp),%rax
400f5e: 73 07 jae 400f67 <strstr@plt+0x6f7>
if(rbp_08h < rbp_10h) {
400f60: b8 ff ff ff ff mov $0xffffffff,%eax
400f65: eb 05 jmp 400f6c <strstr@plt+0x6fc>
return -1;
} else {
400f67: b8 00 00 00 00 mov $0x0,%eax
400f6c: c9 leaveq
400f6d: c3 retq
return 0;
}
}
// readed
void sub_400f6e(arg0)
{
400f6e: 55 push %rbp
400f6f: 48 89 e5 mov %rsp,%rbp
400f72: 48 83 ec 10 sub $0x10,%rsp
// Local variables.
rbp_08h;
400f76: 48 89 7d f8 mov %rdi,-0x8(%rbp)
400f7a: 8b 05 b8 0f 20 00 mov 0x200fb8(%rip),%eax # 601f38 <stdin+0x10>
400f80: 85 c0 test %eax,%eax
400f82: 74 0a je 400f8e <strstr@plt+0x71e>
if(bss_601f38h) {
400f84: bf 12 16 40 00 mov $0x401612,%edi
400f89: e8 92 fa ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("[d] sorting array...");
}
400f8e: 48 8b 45 f8 mov -0x8(%rbp),%rax
400f92: b9 df 0e 40 00 mov $0x400edf,%ecx
400f97: ba 08 00 00 00 mov $0x8,%edx
400f9c: be 10 00 00 00 mov $0x10,%esi
400fa1: 48 89 c7 mov %rax,%rdi
400fa4: e8 c7 f7 ff ff callq 400770 <qsort@plt>
qsort(rbp_08h, 0x10, 8, sub_400edf);
400fa9: c9 leaveq
400faa: c3 retq
}
// readed.
void sub_400fab(arg0, arg1, arg2)
{
400fab: 55 push %rbp
400fac: 48 89 e5 mov %rsp,%rbp
400faf: 53 push %rbx
400fb0: 48 81 ec c8 00 00 00 sub $0xc8,%rsp
// Local variables.
rbp_c8h;
rbp_c0h;
rbp_b8h;
rbp_40h;
400fb7: 48 89 bd 48 ff ff ff mov %rdi,-0xb8(%rbp)
rbp_b8h = arg0;
400fbe: 48 89 b5 40 ff ff ff mov %rsi,-0xc0(%rbp)
rbp_c0h = arg1;
400fc5: 48 89 95 38 ff ff ff mov %rdx,-0xc8(%rbp)
rbp_c8h = arg2;
400fcc: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%rbp)
rbp_14h = 0;
400fd3: 48 8d 45 c0 lea -0x40(%rbp),%rax
400fd7: c7 00 25 30 30 73 movl $0x73303025,(%rax)
400fdd: c6 40 04 00 movb $0x0,0x4(%rax)
rbp_40h = "%00s";
400fe1: 48 8d 85 50 ff ff ff lea -0xb0(%rbp),%rax
400fe8: ba 5a 00 00 00 mov $0x5a,%edx
400fed: be 00 00 00 00 mov $0x0,%esi
400ff2: 48 89 c7 mov %rax,%rdi
400ff5: e8 96 f7 ff ff callq 400790 <memset@plt>
memset(rbp_b0h, '\0', 0x5a);
400ffa: 48 8b 85 48 ff ff ff mov -0xb8(%rbp),%rax
401001: 48 83 c0 04 add $0x4,%rax
401005: 48 89 c7 mov %rax,%rdi
401008: e8 33 f8 ff ff callq 400840 <atoi@plt>
40100d: 89 45 dc mov %eax,-0x24(%rbp)
rbp_24h = atoi(rbp_b0h->offset_08h + 4);
401010: 48 8b 85 38 ff ff ff mov -0xc8(%rbp),%rax
401017: 8b 00 mov (%rax),%eax
401019: 83 f8 0f cmp $0xf,%eax
40101c: 7e 0f jle 40102d <strstr@plt+0x7bd>
if(rbp_c8h->offset_00h > 0x10) {
40101e: bf 28 16 40 00 mov $0x401628,%edi
401023: e8 f8 f9 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Red black tree list full!");
401028: e9 be 01 00 00 jmpq 4011eb <strstr@plt+0x97b>
return;
}
40102d: 83 7d dc 00 cmpl $0x0,-0x24(%rbp)
401031: 78 06 js 401039 <strstr@plt+0x7c9>
401033: 83 7d dc 0f cmpl $0xf,-0x24(%rbp)
401037: 7e 0f jle 401048 <strstr@plt+0x7d8>
if(!(0 <= rbp_24h && rbp_24h < 0x10)) {
401039: bf 42 16 40 00 mov $0x401642,%edi
40103e: e8 dd f9 ff ff callq 400a20 <strstr@plt+0x1b0>
401043: e9 a3 01 00 00 jmpq 4011eb <strstr@plt+0x97b>
return;
}
401048: 48 8b 05 f1 0e 20 00 mov 0x200ef1(%rip),%rax # 601f40 <stdin+0x18>
40104f: 48 89 45 e0 mov %rax,-0x20(%rbp)
401053: eb 10 jmp 401065 <strstr@plt+0x7f5>
for(rbp_20h = bss_601f40h; rbp_14h < rbp_24h; rbp_20h = rbp_20h->offset_04h) {
401055: 48 8b 45 e0 mov -0x20(%rbp),%rax
401059: 48 8b 40 04 mov 0x4(%rax),%rax
40105d: 48 89 45 e0 mov %rax,-0x20(%rbp)
401061: 83 45 ec 01 addl $0x1,-0x14(%rbp)
rbp_14h++;
// ->>
401065: 8b 45 ec mov -0x14(%rbp),%eax
401068: 3b 45 dc cmp -0x24(%rbp),%eax
40106b: 7c e8 jl 401055 <strstr@plt+0x7e5>
}
40106d: 48 8b 45 e0 mov -0x20(%rbp),%rax
401071: 8b 00 mov (%rax),%eax
401073: 85 c0 test %eax,%eax
401075: 74 0f je 401086 <strstr@plt+0x816>
if(rbp_20h->offset_00h) {
401077: bf 5b 16 40 00 mov $0x40165b,%edi
40107c: e8 9f f9 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Element already exists.");
401081: e9 65 01 00 00 jmpq 4011eb <strstr@plt+0x97b>
return;
}
401086: bf 73 16 40 00 mov $0x401673,%edi
40108b: e8 90 f9 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Value for the new element");
401090: b8 00 00 00 00 mov $0x0,%eax
401095: e8 57 fb ff ff callq 400bf1 <strstr@plt+0x381>
40109a: 48 89 45 d0 mov %rax,-0x30(%rbp)
rbp_30h = sub_400bf1();
40109e: 8b 05 94 0e 20 00 mov 0x200e94(%rip),%eax # 601f38 <stdin+0x10>
4010a4: 85 c0 test %eax,%eax
4010a6: 74 72 je 40111a <strstr@plt+0x8aa>
if(bss_601f38h) {
4010a8: bf 6c 15 40 00 mov $0x40156c,%edi
4010ad: e8 6e f9 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20();
4010b2: 48 8d 5d b0 lea -0x50(%rbp),%rbx
4010b6: b8 00 00 00 00 mov $0x0,%eax
4010bb: e8 a9 fa ff ff callq 400b69 <strstr@plt+0x2f9>
4010c0: 89 03 mov %eax,(%rbx)
*rbp_50h = sub_400b69();
4010c2: 0f b6 45 b0 movzbl -0x50(%rbp),%eax
4010c6: 3c 2f cmp $0x2f,%al
4010c8: 7e 18 jle 4010e2 <strstr@plt+0x872>
4010ca: 0f b6 45 b0 movzbl -0x50(%rbp),%eax
4010ce: 3c 39 cmp $0x39,%al
4010d0: 7f 10 jg 4010e2 <strstr@plt+0x872>
4010d2: 0f b6 45 b1 movzbl -0x4f(%rbp),%eax
4010d6: 3c 2f cmp $0x2f,%al
4010d8: 7e 08 jle 4010e2 <strstr@plt+0x872>
4010da: 0f b6 45 b1 movzbl -0x4f(%rbp),%eax
4010de: 3c 39 cmp $0x39,%al
4010e0: 7e 0c jle 4010ee <strstr@plt+0x87e>
if(!('0' <= rbp_50h && rbp_50h <= '9') && !('0' <= rbp_4fh && rbp_4fh <= '9')) {
4010e2: bf 81 15 40 00 mov $0x401581,%edi
4010e7: e8 34 f9 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("[d] Invalid pading");
4010ec: eb 0e jmp 4010fc <strstr@plt+0x88c>
} else {
4010ee: 0f b6 45 b0 movzbl -0x50(%rbp),%eax
4010f2: 88 45 c1 mov %al,-0x3f(%rbp)
rbp_3fh = rbp_50h;
4010f5: 0f b6 45 b1 movzbl -0x4f(%rbp),%eax
4010f9: 88 45 c2 mov %al,-0x3e(%rbp)
rbp_3eh = rbp_4fh;
}
4010fc: bf 90 16 40 00 mov $0x401690,%edi
401101: e8 1a f9 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Optional note for the new element:");
401106: 48 8d 85 50 ff ff ff lea -0xb0(%rbp),%rax
40110d: be 5a 00 00 00 mov $0x5a,%esi
401112: 48 89 c7 mov %rax,%rdi
401115: e8 c0 f9 ff ff callq 400ada <strstr@plt+0x26a>
sub_400ada(rbp_b0h, 0x5a);
}
40111a: 8b 05 18 0e 20 00 mov 0x200e18(%rip),%eax # 601f38 <stdin+0x10>
401120: 85 c0 test %eax,%eax
401122: 74 23 je 401147 <strstr@plt+0x8d7>
if(bss_601f38h) {
401124: 48 8b 05 15 0e 20 00 mov 0x200e15(%rip),%rax # 601f40 <stdin+0x18>
40112b: 48 89 c6 mov %rax,%rsi
40112e: bf b3 16 40 00 mov $0x4016b3,%edi
401133: b8 00 00 00 00 mov $0x0,%eax
401138: e8 43 f6 ff ff callq 400780 <printf@plt>
printf("[d] List head at: %p\n", bss_601f40h);
40113d: bf 00 00 00 00 mov $0x0,%edi
401142: e8 b9 f6 ff ff callq 400800 <fflush@plt>
fflush(NULL);
}
401147: 48 8b 45 e0 mov -0x20(%rbp),%rax
40114b: c7 00 01 00 00 00 movl $0x1,(%rax)
rbp_20h->offset_00h = 1;
401151: 48 8b 85 38 ff ff ff mov -0xc8(%rbp),%rax
401158: 8b 00 mov (%rax),%eax
40115a: 48 63 d0 movslq %eax,%rdx
40115d: 48 8b 45 e0 mov -0x20(%rbp),%rax
401161: 48 89 50 66 mov %rdx,0x66(%rax)
rbp_20h->offset_66h = (long)rbp_c8h->offset_00h;
401165: 48 8b 85 38 ff ff ff mov -0xc8(%rbp),%rax
40116c: 8b 00 mov (%rax),%eax
40116e: 48 98 cltq
401170: 48 8d 14 c5 00 00 00 lea 0x0(,%rax,8),%rdx
401177: 00
401178: 48 8b 85 40 ff ff ff mov -0xc0(%rbp),%rax
40117f: 48 01 c2 add %rax,%rdx
401182: 48 8b 45 d0 mov -0x30(%rbp),%rax
401186: 48 89 02 mov %rax,(%rdx)
rbp_c0h[rbp_c8h->offset_00h * 8] = rbp_30h;
401189: 48 8b 85 38 ff ff ff mov -0xc8(%rbp),%rax
401190: 8b 00 mov (%rax),%eax
401192: 8d 50 01 lea 0x1(%rax),%edx
401195: 48 8b 85 38 ff ff ff mov -0xc8(%rbp),%rax
40119c: 89 10 mov %edx,(%rax)
40119e: 48 8b 45 e0 mov -0x20(%rbp),%rax
4011a2: 48 8d 48 0c lea 0xc(%rax),%rcx
4011a6: 48 8d 95 50 ff ff ff lea -0xb0(%rbp),%rdx
4011ad: 48 8d 45 c0 lea -0x40(%rbp),%rax
4011b1: 48 89 c6 mov %rax,%rsi
4011b4: 48 89 cf mov %rcx,%rdi
4011b7: b8 00 00 00 00 mov $0x0,%eax
4011bc: e8 8f f6 ff ff callq 400850 <sprintf@plt>
sprintf(rbp_20h->offset_0ch, rbp_40h, rbp_b0h);
4011c1: 8b 05 71 0d 20 00 mov 0x200d71(%rip),%eax # 601f38 <stdin+0x10>
4011c7: 85 c0 test %eax,%eax
4011c9: 74 20 je 4011eb <strstr@plt+0x97b>
if(bss_601f38h) {
4011cb: 48 8b 45 e0 mov -0x20(%rbp),%rax
4011cf: 48 89 c6 mov %rax,%rsi
4011d2: bf c9 16 40 00 mov $0x4016c9,%edi
4011d7: b8 00 00 00 00 mov $0x0,%eax
4011dc: e8 9f f5 ff ff callq 400780 <printf@plt>
printf("[d] New Element at: %p\n", rbp-20h);
4011e1: bf 00 00 00 00 mov $0x0,%edi
4011e6: e8 15 f6 ff ff callq 400800 <fflush@plt>
fflush(NULL);
}
4011eb: 48 81 c4 c8 00 00 00 add $0xc8,%rsp
4011f2: 5b pop %rbx
4011f3: 5d pop %rbp
4011f4: c3 retq
}
void sub_4011f5(arg0, arg1, arg2)
{
4011f5: 55 push %rbp
4011f6: 48 89 e5 mov %rsp,%rbp
4011f9: 48 83 ec 20 sub $0x20,%rsp
4011fd: 48 89 7d f8 mov %rdi,-0x8(%rbp)
401201: 48 89 75 f0 mov %rsi,-0x10(%rbp)
401205: 48 89 55 e8 mov %rdx,-0x18(%rbp)
401209: bf e8 16 40 00 mov $0x4016e8,%edi
40120e: e8 0d f8 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Sorry, the compiler didn't support this feature.");
401213: bf 20 17 40 00 mov $0x401720,%edi
401218: e8 03 f8 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Please wait until C++16 is standardized.");
40121d: c9 leaveq
40121e: c3 retq
}
sub_40121f(arg0, arg1);
{
40121f: 55 push %rbp
401220: 48 89 e5 mov %rsp,%rbp
401223: 48 83 ec 60 sub $0x60,%rsp
// Local variables.
char *rbp_60h;
char *rbp_58h;
int rbp_04h;
401227: 48 89 7d a8 mov %rdi,-0x58(%rbp)
rbp_58h = arg0;
40122b: 48 89 75 a0 mov %rsi,-0x60(%rbp)
rbp_60h = arg1;
40122f: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
rbp_04h = 0;
401236: 48 8d 45 b0 lea -0x50(%rbp),%rax
40123a: ba 40 00 00 00 mov $0x40,%edx
40123f: be 00 00 00 00 mov $0x0,%esi
401244: 48 89 c7 mov %rax,%rdi
401247: e8 44 f5 ff ff callq 400790 <memset@plt>
memset(rbp_50h, '\0', 0x40);
while(true) {
40124c: bf 49 17 40 00 mov $0x401749,%edi
401251: b8 00 00 00 00 mov $0x0,%eax
401256: e8 25 f5 ff ff callq 400780 <printf@plt>
printf("> ");
40125b: bf 00 00 00 00 mov $0x0,%edi
401260: e8 9b f5 ff ff callq 400800 <fflush@plt>
fflush(NULL);
401265: 48 8d 45 b0 lea -0x50(%rbp),%rax
401269: be 40 00 00 00 mov $0x40,%esi
40126e: 48 89 c7 mov %rax,%rdi
401271: e8 64 f8 ff ff callq 400ada <strstr@plt+0x26a>
sub_400ada(rbp_50h, 0x40);
401276: 8b 05 bc 0c 20 00 mov 0x200cbc(%rip),%eax # 601f38 <stdin+0x10>
40127c: 85 c0 test %eax,%eax
40127e: 74 20 je 4012a0 <strstr@plt+0xa30>
if(bss_601f38h) {
401280: 48 8d 45 b0 lea -0x50(%rbp),%rax
401284: 48 89 c6 mov %rax,%rsi
401287: bf 4c 17 40 00 mov $0x40174c,%edi
40128c: b8 00 00 00 00 mov $0x0,%eax
401291: e8 ea f4 ff ff callq 400780 <printf@plt>
printf("[d] Command: %s\n");
401296: bf 00 00 00 00 mov $0x0,%edi
40129b: e8 60 f5 ff ff callq 400800 <fflush@plt>
fflush(NULL);
}
4012a0: 48 8d 45 b0 lea -0x50(%rbp),%rax
4012a4: be 5d 17 40 00 mov $0x40175d,%esi
4012a9: 48 89 c7 mov %rax,%rdi
4012ac: e8 bf f5 ff ff callq 400870 <strstr@plt>
4012b1: 48 85 c0 test %rax,%rax
4012b4: 74 0f je 4012c5 <strstr@plt+0xa55>
if(strstr(rbp_50h, "debug")) {
4012b6: b8 00 00 00 00 mov $0x0,%eax
4012bb: e8 6e f9 ff ff callq 400c2e <strstr@plt+0x3be>
sub_400c2e();
4012c0: e9 ed 00 00 00 jmpq 4013b2 <strstr@plt+0xb42>
} else
4012c5: 48 8d 45 b0 lea -0x50(%rbp),%rax
4012c9: be 63 17 40 00 mov $0x401763,%esi
4012ce: 48 89 c7 mov %rax,%rdi
4012d1: e8 9a f5 ff ff callq 400870 <strstr@plt>
4012d6: 48 85 c0 test %rax,%rax
4012d9: 74 11 je 4012ec <strstr@plt+0xa7c>
if(strstr(rbp_50h, "print")) {
4012db: 48 8b 45 a8 mov -0x58(%rbp),%rax
4012df: 48 89 c7 mov %rax,%rdi
4012e2: e8 f1 f9 ff ff callq 400cd8 <strstr@plt+0x468>
sub_400cd8(rbp_58h);
4012e7: e9 c6 00 00 00 jmpq 4013b2 <strstr@plt+0xb42>
} else
4012ec: 48 8d 45 b0 lea -0x50(%rbp),%rax
4012f0: be 69 17 40 00 mov $0x401769,%esi
4012f5: 48 89 c7 mov %rax,%rdi
4012f8: e8 73 f5 ff ff callq 400870 <strstr@plt>
4012fd: 48 85 c0 test %rax,%rax
401300: 74 11 je 401313 <strstr@plt+0xaa3>
if(strstr(rbp_50h, "total")) {
401302: 48 8b 45 a8 mov -0x58(%rbp),%rax
401306: 48 89 c7 mov %rax,%rdi
401309: e8 dc fa ff ff callq 400dea <strstr@plt+0x57a>
sub_400dea(rbp_58h);
40130e: e9 9f 00 00 00 jmpq 4013b2 <strstr@plt+0xb42>
} else
401313: 48 8d 45 b0 lea -0x50(%rbp),%rax
401317: be 6f 17 40 00 mov $0x40176f,%esi
40131c: 48 89 c7 mov %rax,%rdi
40131f: e8 4c f5 ff ff callq 400870 <strstr@plt>
401324: 48 85 c0 test %rax,%rax
401327: 74 0e je 401337 <strstr@plt+0xac7>
if(strstr(rbp_50h, "sort")) {
401329: 48 8b 45 a8 mov -0x58(%rbp),%rax
40132d: 48 89 c7 mov %rax,%rdi
401330: e8 39 fc ff ff callq 400f6e <strstr@plt+0x6fe>
sub_400f6e(rbp_58h);
401335: eb 7b jmp 4013b2 <strstr@plt+0xb42>
} else
401337: 48 8d 45 b0 lea -0x50(%rbp),%rax
40133b: be 74 17 40 00 mov $0x401774,%esi
401340: 48 89 c7 mov %rax,%rdi
401343: e8 28 f5 ff ff callq 400870 <strstr@plt>
401348: 48 85 c0 test %rax,%rax
40134b: 74 19 je 401366 <strstr@plt+0xaf6>
if(strstr(rbp_50h, "add")) {
40134d: 48 8b 55 a0 mov -0x60(%rbp),%rdx
401351: 48 8b 4d a8 mov -0x58(%rbp),%rcx
401355: 48 8d 45 b0 lea -0x50(%rbp),%rax
401359: 48 89 ce mov %rcx,%rsi
40135c: 48 89 c7 mov %rax,%rdi
40135f: e8 47 fc ff ff callq 400fab <strstr@plt+0x73b>
sub_400fab(rbp_50h, rbp_58h, rbp_60h);
401364: eb 4c jmp 4013b2 <strstr@plt+0xb42>
} else
401366: 48 8d 45 b0 lea -0x50(%rbp),%rax
40136a: be 78 17 40 00 mov $0x401778,%esi
40136f: 48 89 c7 mov %rax,%rdi
401372: e8 f9 f4 ff ff callq 400870 <strstr@plt>
401377: 48 85 c0 test %rax,%rax
40137a: 74 19 je 401395 <strstr@plt+0xb25>
if(strstr(rbp_50h, "del")) {
40137c: 48 8b 55 a0 mov -0x60(%rbp),%rdx
401380: 48 8b 4d a8 mov -0x58(%rbp),%rcx
401384: 48 8d 45 b0 lea -0x50(%rbp),%rax
401388: 48 89 ce mov %rcx,%rsi
40138b: 48 89 c7 mov %rax,%rdi
40138e: e8 62 fe ff ff callq 4011f5 <strstr@plt+0x985>
sub_4011f5(rbp_50h, rbp_58h, rbp_60h);
401393: eb 1d jmp 4013b2 <strstr@plt+0xb42>
} else
401395: 48 8d 45 b0 lea -0x50(%rbp),%rax
401399: be 7c 17 40 00 mov $0x40177c,%esi
40139e: 48 89 c7 mov %rax,%rdi
4013a1: e8 ca f4 ff ff callq 400870 <strstr@plt>
4013a6: 48 85 c0 test %rax,%rax
4013a9: 74 07 je 4013b2 <strstr@plt+0xb42>
if(strstr(rbp_50h, "quit")) {
rbp_04h = 1;
4013ab: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%rbp)
}
4013b2: 83 7d fc 00 cmpl $0x0,-0x4(%rbp)
4013b6: 74 02 je 4013ba <strstr@plt+0xb4a>
if(!rbp_04h) {
4013b8: eb 05 jmp 4013bf <strstr@plt+0xb4f>
return;
}
4013ba: e9 8d fe ff ff jmpq 40124c <strstr@plt+0x9dc>
}
4013bf: c9 leaveq
4013c0: c3 retq
}
void main()
{
4013c1: 55 push %rbp
4013c2: 48 89 e5 mov %rsp,%rbp
4013c5: 48 81 ec d0 00 00 00 sub $0xd0,%rsp
// Local variables.
int rbp_c4h;
char rbp_c0h[];
4013cc: c7 85 3c ff ff ff 00 movl $0x0,-0xc4(%rbp)
4013d3: 00 00 00
rbp_c4h = 0;
4013d6: 48 8d 85 40 ff ff ff lea -0xc0(%rbp),%rax
4013dd: 48 89 c7 mov %rax,%rdi
4013e0: e8 91 f5 ff ff callq 400976 <strstr@plt+0x106>
sub_400976(rbp_c0h);
4013e5: bf 10 00 00 00 mov $0x10,%edi
4013ea: e8 55 f6 ff ff callq 400a44 <strstr@plt+0x1d4>
sub_400a44(0x10);
4013ef: 48 8d 45 80 lea -0x80(%rbp),%rax
4013f3: ba 80 00 00 00 mov $0x80,%edx
4013f8: be 00 00 00 00 mov $0x0,%esi
4013fd: 48 89 c7 mov %rax,%rdi
401400: e8 8b f3 ff ff callq 400790 <memset@plt>
memset(rbp_80h, '\0', 0x80);
401405: bf 88 17 40 00 mov $0x401788,%edi
40140a: e8 11 f6 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("Welcome to Glorious Modern C++ 15");
40140f: bf a5 15 40 00 mov $0x4015a5,%edi
401414: e8 07 f6 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("\0");
401419: bf b0 17 40 00 mov $0x4017b0,%edi
40141e: e8 fd f5 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("As part of the C++ 15 standard, we have overhauled arrays so they");
401423: bf f8 17 40 00 mov $0x4017f8,%edi
401428: e8 f3 f5 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("provide a Network Interface Impl for remote usage. Sticking with");
40142d: bf 40 18 40 00 mov $0x401840,%edi
401432: e8 e9 f5 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("earlier C++ standards, we have added --omg-optimized and backed it");
401437: bf 88 18 40 00 mov $0x401888,%edi
40143c: e8 df f5 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("with a red black vector list tree for extra reduced complexity and");
401441: bf cb 18 40 00 mov $0x4018cb,%edi
401446: e8 d5 f5 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("succinct error message.");
40144b: bf a5 15 40 00 mov $0x4015a5,%edi
401450: e8 cb f5 ff ff callq 400a20 <strstr@plt+0x1b0>
sub_400a20("\0");
401455: 48 8d 95 3c ff ff ff lea -0xc4(%rbp),%rdx
40145c: 48 8d 45 80 lea -0x80(%rbp),%rax
401460: 48 89 d6 mov %rdx,%rsi
401463: 48 89 c7 mov %rax,%rdi
401466: e8 b4 fd ff ff callq 40121f <strstr@plt+0x9af>
sub_40121f(rbp_80h, rbp_c4h);
40146b: bf 00 00 00 00 mov $0x0,%edi
401470: e8 eb f3 ff ff callq 400860 <exit@plt>
exit(0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment