shellcode

写过shellcode的都写过这样的语句
unsigned char shellcode[]={}; 
((void (*)())(&shellcode))();

然而输出shellcode,&shellcode, &shellcode[0]它们的值却是一样的,但在这里为什么却只能用&shellcode?

如果将它们自身的值各自增一再输出你就会看到不同的结果,这是为什么?
现以windows
汇编为 例,汇编中要把一个地址所指向的内存的一个字节放到一个寄存器中会这样修饰一个地址
Mov al,byte ptr[x]

两个字节会这样
 Mov ax,word ptr[x] 

如果你用*shellcode,*(&shellcode),(&shellcode[0]同shellcode)去访问该地址存放的数据会得到不同的汇编语句,
如果数组shellcode占四个字节

*shellcode会被编译器 编译成byte ptr[shellcode]

*(&shellcode) 被编译成dword ptr[shellcode]

说了这么多为什么只能用&shellcode?

假设shellcode[0]=mov,shellcode[1]=eax,shellcode[2]=3;

因为如果把shellcode当作函数的地址,此函数只有一个字节的text―mov, cpu在执行此条指令时虽然能识别这是mov指令,但却找不到其源操作数和目地操作数,

而把&shellcode当作地址函数会有四个字节text―mov eax,3,CPU会正确执行此条指令,,,,,,
This is why ,,,,,,

Shellcode Helper v1.62 Coded by TeLeMan (c) 2008-2013 Usage: schelper.exe [options] Options: -i [input file] input file (Default: stdin) -o [output file] output file (Default: stdout) -s input file format (Default: Auto-Detection) -sb input file format is Binary -sp the input file format's parameters -d output file format (Default: C format) -db output file format is Binary -dp the output file format's parameters -search get the start offset by the pattern: e.g. PK\x03\x04 -soff fix the match offset after searching (Default: 0) -off convert the input file from the offset (Default: 0) -len convert the input file with the length (Default: 0 - MAX) -en [encoder] encode shellcode (Default: XorDword) -de [encoder] decode shellcode (Default: Auto-Detection) -ex exclude characters: e.g. 0x00,0x01-0x1F,0xFF (Default: 0x00) -in incude characters only -ep the encoder's parameters -t [pid] execute or inject shellcode into process for testing -td [pid] execute or inject shellcode into process for debugging -stack put shellcode into stack and execute it (ESP is the shellcode start) -noinfo display no normal messages except error messages Available formats: 0 - C 1 - C(HexArray) 2 - Perl 3 - Python 4 - Ruby 5 - JavaScript(Escape) 6 - VBScript(Escape) 7 - Pascal 8 - MASM(Data) 9 - HexDump 10 - BitString 11 - HexString 12 - HexArray(C like) 13 - Base64 14 - Binary 15 - HexString(C like) 16 - HexString(Escape) 17 - HexString(JavaScript,UNICODE) 18 - URI(ISO-8859-1) 19 - XML(PCDATA) 20 - BigNumber 21 - BigNumber(Hex) 22 - BigNumber(BaseX) 23 - FloatPoint 24 - UnixTimestamp 25 - GUID 26 - MASM(ASM) 27 - NASM 28 - YASM(ASM) 29 - FASM(ASM) 30 - JWASM(ASM) 31 - POASM(ASM) 32 - GOASM(ASM) 33 - GNU ASM Available encoders:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值