计算 shellcode 中的字节数

Counting number of bytes in shellcode

我想知道下面的代码(shellcode)有多少字节:

"\x31\xc0"             /* Line 1:  xorl    %eax,%eax              */
"\x50"                 /* Line 2:  pushl   %eax                   */
"\x68""//sh"           /* Line 3:  pushl   [=10=]x68732f2f            */
"\x68""/bin"           /* Line 4:  pushl   [=10=]x6e69622f            */
"\x89\xe3"             /* Line 5:  movl    %esp,%ebx              */
"\x50"                 /* Line 6:  pushl   %eax                   */
"\x53"                 /* Line 7:  pushl   %ebx                   */
"\x89\xe1"             /* Line 8:  movl    %esp,%ecx              */
"\x99"                 /* Line 9:  cdq                            */
"\xb0\x0b"             /* Line 10: movb    [=10=]x0b,%al              */
"\xcd\x80"             /* Line 11: int     [=10=]x80                  */

我知道一个字节有八位,所以一对十六进制就是一个字节。比如\x31就是0x31,就是一个字节。但我不确定如何分别计算第 3 行和第 4 行的 //sh/bin 文本。我也将它们计为单个字节吗?那么这个shellcode的总大小是18字节吗?

A char 数据类型是 1 个字节,所以两个字符串的大小都是 4 个字节。您可以使用 Python:

确认这一点
>>> len(b'/bin')
4
>>> (0x6e69622f).to_bytes(4, "little")
b'/bin'