Assembly 空的外壳代码-寄存器偏移量为10字节

Assembly 空的外壳代码-寄存器偏移量为10字节,assembly,encoding,hex,shellcode,Assembly,Encoding,Hex,Shellcode,我需要在python脚本中输入字节。我需要从汇编中的寄存器%ebx偏移10字节: 89 43 0a mov $eax,0xa(%ebx) 我应该提到,当我运行这个脚本时,我会将这些字节(和其他字节)转储到一个文件中。然后文件的内容变成外壳代码,我用它注入堆栈。问题是,当C函数strcpy看到0x0a时,它会停止复制它,认为它是空终止符 我理解为什么会发生这种情况,但如何在不使用0x0a(空终止符值)的情况下将外壳代码解释为10字节的偏移量?例如,如果我将值0a更改为08,这将按照我的要求工作(

我需要在python脚本中输入字节。我需要从汇编中的寄存器%ebx偏移10字节:

89 43 0a
mov $eax,0xa(%ebx)
我应该提到,当我运行这个脚本时,我会将这些字节(和其他字节)转储到一个文件中。然后文件的内容变成外壳代码,我用它注入堆栈。问题是,当C函数strcpy看到0x0a时,它会停止复制它,认为它是空终止符

我理解为什么会发生这种情况,但如何在不使用0x0a(空终止符值)的情况下将外壳代码解释为10字节的偏移量?例如,如果我将值0a更改为08,这将按照我的要求工作(当然,如果偏移量只有8个字节)

python脚本如下所示:

print "\x89\x43\x0a"

这样做很简单,只需将其分成两部分,两部分都不是0或10:)

例如:

add $5, %ebx
mov %eax, 5(%ebx)
sub $5, %ebx # optional: restore ebx

您仍在将字节
0a
写入标准输出。我不确定你想在这里做什么。它被解释为一个换行符是什么?如果在文本编辑器中读取为文本,打印到终端或其他任何地方,则字节0A为换行符。如果读取为二进制-例如在十六进制编辑器中或作为机器代码-您将看到它仍然是0A(根据需要)。听起来像是您想要编写。这正是我想要做的。我只是不知道如何在不使用0x0a值的情况下将偏移量设置为10字节。好吧,但这更像是一个汇编问题,而不是Python问题。我得把它传下去,我的装配已经生锈了。不过可能会有帮助。谢谢!正是我需要的。