Shellcode:call + null

时间:2013-07-16 05:14:08

标签: null call shellcode

我有x86_64 shellcode的以下程序集:

call writer

writestring db "ABCD",0x0d0a

writer:
pop rsi

编译时,objdump -d显示(为简洁起见,剪断了一些):

  4000a4:   e8 06 00 00 00          callq  4000af <writer>

00000000004000a9 <writestr>:
  4000a9:   42                      rex.X
  4000aa:   42                      rex.X
  4000ab:   42                      rex.X
  4000ac:   42 0a 0d 5e 48 31 d2    rex.X

00000000004000af <writer>:
  4000af:   5e                      pop    %rsi

我想从callq后面删除三个空值。呼叫附近,呼叫远等不是这样做的。任何人都可以提出建议吗?

抱歉,我不是很清楚。我正在使用调用,以便它保存了我可以立即弹出到rsi中的writestr的地址。我无法访问rip(或者我可以?)手动找出偏移量。

1 个答案:

答案 0 :(得分:0)

您应该能够通过使用JMP(或类似)指令来消除空字节。例如:

jmp $+8  

writestring db "BBBB",0x0d, 0x0a

writer:
pop rsi

使用nasm -f elf64生成以下机器代码:

0000000000000000 <writestring-0x2>:
   0:   eb 06                   jmp    8 <writer>

0000000000000002 <writestring>:
   2:   42                      rex.X
   3:   42                      rex.X
   4:   42                      rex.X
   5:   42                      rex.X
   6:   0d                      .byte 0xd
   7:   0a                      .byte 0xa

0000000000000008 <writer>:
   8:   5e                      pop    %rsi

您可能已经注意到我没有为RET指令设置任何内容。但是如果你需要这样的指导,你可以轻松地自己做程序。