#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#define e();
if(((unsigned int)ptr & 0xff000000)==0xca000000)
{
setresuid(geteuid(), geteuid(), geteuid()); execlp("/bin/sh", "sh", "-i", NULL);
}
void print(unsigned char *buf, int len)
{
int i;
printf("[ ");
for(i=0; i < len; i++) printf("%x ", buf[i]);
printf(" ]\n");
}
int main()
{
unsigned char buf[512];
unsigned char *ptr = buf + (sizeof(buf)/2);
unsigned int x;
while((x = getchar()) != EOF) {
switch(x) {
case '\n': print(buf, sizeof(buf)); continue; break;
case '\\': ptr--; break;
default: e(); if(ptr > buf + sizeof(buf)) continue; ptr++[0] = x; break;
}
}
printf("All done\n");
}
我的错误包括:| 8 |错误:预期的标识符或'if'|前的'('
这是来自http://overthewire.org/wargames/vortex/vortex1.html的直接副本,因此我认为语法正确
最佳答案
您正在使用哪种类型的操作系统?如果您试图获取一个exe文件,并且程序正在引用bash(“ bin / bash”),则那里将存在一些问题。
另外,我相信unistd.h是Unix库,如果您在Windows计算机上,可能会导致一些问题。
要记住的另一件事是,该文件的作者将宏全部定义在一行上,看起来您已将其分解为两行,这可能会或可能不会引起问题。只是一些要看的东西。
#define e(); if(((unsigned int)ptr & 0xff000000)==0xca000000) { setresuid(geteuid(), geteuid(), geteuid()); execlp("/bin/sh", "sh", "-i", NULL); }