Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.79 KB | None | 0 0
  1.  
  2. void op_dec_addr(void)
  3. {
  4.   // tmp used: rax, rdi, rdx
  5.   //
  6.   // statically (must be preserved)
  7.   // vm_data: rsi
  8.   // vm_head: rbx
  9.   // vm_tail: rcx
  10.  
  11.   // if (--(vm->vm_data) < vm->vm_head)
  12.   asm ( "dec %rsi"           );
  13.   asm ( "cmp %rbx, %rsi"     );
  14.   asm ( "jl _exit2"          );
  15.  
  16.   // pos = vm->vm_data - vm->vm_head;
  17.   asm ( "mov %rsi, %rdx"     );
  18.   asm ( "sub %rbx, %rdx"     );
  19.   // data_size = (vm->vm_tail - vm->vm_head) + 0x20;
  20.   asm ( "mov %rcx, %rdi"     );
  21.   asm ( "sub %rbx, %rdi"     );
  22.   asm ( "add $0x20, %rdi"    );
  23.  
  24.   // save our structure
  25.   asm ( "push %rsi"          );
  26.   asm ( "push %rbx"          );
  27.   asm ( "push %rcx"          );
  28.   asm ( "push %rdi"          ); // save data_size
  29.  
  30.   // if (!(vm->vm_head = realloc(vm->vm_head, data_size)))
  31.   asm ( "mov %rdi, %rsi"     );
  32.   asm ( "mov %rbx, %rdi"     );
  33.   asm ( "call realloc"       ); // realloc(rdi, rsi)
  34.  
  35.   // restore our structure
  36.   asm ( "pop %rdi"           ); // restore data_size
  37.   asm ( "pop %rcx"           );
  38.   asm ( "pop %rbx"           );
  39.   asm ( "pop %rsi"           );
  40.  
  41.   asm ( "cmp $0, %rax"       );
  42.   asm ( "jne _continue_alloc2");
  43.   //  _abort(ABORT_ALLOC);
  44.   asm ( "push $1"            );
  45.   asm ( "call _abort"        );
  46.  
  47.   asm ( "_continue_alloc2:"  );
  48.   asm ( "mov %rax, %rbx"     );
  49.   // vm->vm_data = vm->vm_head + 0x20 + pos;
  50.   asm ( "mov %rbx, %rsi"     );
  51.   asm ( "add $0x20, %rsi"    );
  52.   asm ( "add %rdx, %rsi"     );
  53.   // vm->vm_tail = vm->vm_head + data_size;
  54.   asm ( "mov %rbx, %rcx"     );
  55.   asm ( "add %rdi, %rcx"     );
  56.  
  57.   // memset(vm->vm_head, 0, 0x20);
  58.   asm ( "_zero_memset2:"     );
  59.   asm ( "movb $0, (%rax)"    );
  60.   asm ( "inc %rax"           );
  61.   asm ( "cmp %rsi, %rax"     );
  62.   asm ( "jne _zero_memset2"  );
  63.  
  64.   asm ( "_exit2:"            );
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement