Fix 2001/anonymous - it now works!
This was a fun one to figure out. There were a few steps. Amongst them was adding the include for mmap(). Another part that might or might not be relevant was having main() call a new function rather than main() itself. This seemingly solved an infinite recursion call to main() (according to gcc). I changed the third arg in the call to mmap() to be PROT_READ|PROT_WRITE. This might not have been necessary as it might evaluate to 3 which is what it was. I regret that some macros were removed and some formatting was changed. This was not intentional but I want to get the fix in and then I can fix the formatting and macros (or try to - some of it might or might not cause a problem). Note that it will crash on any binary that's not 32-bit/x86. In other words this won't work in macOS unless you have an old enough Mac that supports 32-bit binaries. With gcc (which is clang in macOS so that won't work either) one can do -m32 and that's what is done for anonymous.ten. It probably should be built by default but it's currently not.
This commit is contained in:
1 parent
1685f8e2ee
commit
efdee208a2
5 files changed
+61
-482
No files matched your search
+40
-25
@@ -1,41 +1,56 @@
|
||||
#define processor x86
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdlib.h>
|
||||
#include <strings.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#define l int*
|
||||
#define F char
|
||||
struct stat t;
|
||||
|
||||
struct stat t;
|
||||
#define c return
|
||||
#define I (P+=4,*L(P-4,0))
|
||||
#define G (signed F)E(*L(P++,0))
|
||||
#define C(O,D)E (D[B+V(010)/4+O*10])
|
||||
#define C(O,D) E (D[B+V(010)/4+O*10])
|
||||
#define U R[4]=E(V(17)-4),*(l)V(021)=
|
||||
F M [99],Q[99],b[9999],*ss,*d=b,*z;
|
||||
char M [99],Q[99],b[15000],*ss,*d=b, *z;
|
||||
#define O =(n=*(l)V(021),R[4]=E(V(17)+4),n)
|
||||
#define p(a,b,c) system((sprintf(a,b,k[1]),c)),z
|
||||
#define g (y/010&7)
|
||||
#define R (B+13)
|
||||
#define x86 (F*)index\
|
||||
(ss+V(i ),0100)
|
||||
#define D(y,n,a,m,i,c )d+=sprintf( d,y,n,a,m,i,c ),(F*\
|
||||
) P
|
||||
l B,i,n,a,r,y ,
|
||||
P ;
|
||||
#define Tr(an,sl,at,or) l an##i(d,sl){ c at? an##i(d,r):or; } \
|
||||
l an(d, sl){ c \
|
||||
r=V(014 )&63,an##i(d,sl); }
|
||||
#define add(Ev,Gv) Ev(){ i=((a-=16)+C(r,4))/4,(\
|
||||
Gv?Ev() :0) ; } Ev##n(){ a=C(r,5),Ev(); }
|
||||
Tr(L,r, C(r,3)&&C(r,3)<=d?(l)(((int)B)+d+C(r,4)-C(r,3)):(((int)B)^d)>>24&&--\
|
||||
r,(l)d) Tr(Run,a,(ss=strcmp((F*)B+C((V(12)>>16),4)+C(--r,0),A(.strtab))?ss:(F\
|
||||
*)B+C(r ,4),C(r,1)-2),0) add(Sca ,V(-~i)-P+2) add(ru,strcmp(ss+V(i),A(main)))
|
||||
E(DX) { c *z? DX:DX <<030|(DX&65280)<<010|DX>>8&65280|DX>>24&0377; } l K(k){
|
||||
c L(E(k [(l)V(17)]),0); } V(v){ c E(B[v]); }
|
||||
#define g (y/010&7)
|
||||
#define R (B+13)
|
||||
#define x86 (F*)index(ss+V(i ),0100)
|
||||
|
||||
#define D(y,n,a,m,i,c) d+=sprintf( d,y,n,a,m,i,c ),(F* ) P
|
||||
|
||||
int *B, i,n,a,r,y ,
|
||||
P ;
|
||||
|
||||
|
||||
int* Li(d,r){ return E (3[B+V(010)/4+r*10])&&E (3[B+V(010)/4+r*10])<=d?(int*)(((int)B)+d+E (4[B+V(010)/4+r*10])-E (3[B+V(010)/4+r*10])):(((int)B)^d)>>24&&--r? Li(d,r):(int*)d; } int* L(d, r){ return r=V(014 )&63,Li(d,r); }
|
||||
int* Runi(d,a){ return (ss=strcmp((char*)B+E (4[B+V(010)/4+(V(12)>>16)*10])+E (0[B+V(010)/4+--r*10]),".strtab")?ss:(char*)B+E (4[B+V(010)/4+r*10]),E (1[B+V(010)/4+r*10])-2)? Runi(d,r):0; } int* Run(d, a){ return r=V(014 )&63,Runi(d,a); }
|
||||
Sca(){ i=((a-=16)+E (4[B+V(010)/4+r*10]))/4,(V(-~i)-P+2?Sca() :0) ; } Scan(){ a=E (5[B+V(010)/4+r*10]),Sca(); } ru(){ i=((a-=16)+E (4[B+V(010)/4+r*10]))/4,(strcmp(ss+V(i),"main")?ru() :0) ; } run(){ a=E (5[B+V(010)/4+r*10]),ru(); }
|
||||
E(DX)
|
||||
{
|
||||
return *z?
|
||||
DX : DX <<030 |
|
||||
(DX&65280)<<010 |
|
||||
DX>>8 & 65280 |
|
||||
DX>>24&0377;
|
||||
}
|
||||
|
||||
int* K(k){
|
||||
return L(E(k [(int*)V(17)]),0); }
|
||||
|
||||
V(v){
|
||||
return E (B[v]);
|
||||
}
|
||||
|
||||
int
|
||||
main (int cka, char **k) { char *ck = (char *)cka;
|
||||
exit(E((ck?main((z?(stat(M,&t)?P+=a+'{'?0:3:execv(M,k),a=G,i=P,y=G&255,sprintf(Q,y/'@'-3?A(*L(V(%d+%d)+%d,0)):A(R[%d]),(y&7),'\r',y/0100-1?0:G),(a+127&&a+'}'&&a+1?(a+61&&a+24&&a+025?(P=a+'H'&&a%061<=0?P:i,D(a>0?" R[%d]=E(~-E(R[%d])),\0 U R[%d],\0 R[%d] O,\0 U %d,\0R[%d]=0,"+(a&'8')*3:a <- 'c'?" %d, %c%s = R[%d], \0 %d, *R=%c%s==R[%d], \0 R[%d]=(int)%c%s,"-a%'w'%'j'*5:"%d,%d,%s=%d,",a>0?a-'h'?a-49?a&7:g:I:g,a>0?a&7:"& "[a%3%2+1],a+72?Q:A(*R),a>0|a<-99?g:I,0)):(P=i,i=a+61?a+21?E(I):G:0,D(a%' '+29+"P O,\0 U %d,P=%d,",P,P+i,0,0,0),p(d,"A'",b))):(n=g-4?g%5-1?a+127?G:I:0:(Scan(),*( x86?processor :d)=0,(int)(ss+V(i))),g%5<2?D(g%5?" %s=E(~-E(%s)), \0 U %s,"+4*g:"%s=E(E(%s)%c%d),",Q,Q,"+ - "[g],n,0):(a=G-'u'?'!':'=',D(g-4?"P=%d%c=%s?%d:%d,":"*R=E(((int(*)(l,l,l))%s)(K(1),K(2),K(3))),P O,",n,a,Q,P,P+G),p(d,"A'",b))))):(Run((z=(F*)&ck,stat(k[1],&t),B=(l)mmap(0,i=t.st_size,3,1,open(k[1],2),0))),magic((R[4]=E(B+i/4),run(),P=V(-~i),U 0)),sprintf(M,A(.%s%d),k[1],P),D("%s %s '-DX=A(%s)' -o %s '-Dmagic=",X,__FILE__,X,M,fflush(0)))),k):p(M,A(rm -f .%s*),M),*R)));
|
||||
pain(char *ck, char **k)
|
||||
{
|
||||
return (z?(stat(M,&t)?P+=a+'{'?0:3:execv(M,k),a=(signed char)E(*L(P++,0)),i=P,y=(signed char)E(*L(P++,0))&255,sprintf(Q,y/'@'-3?"*L(V(%d+%d)+%d,0)":"R[%d]",(y&7),'\r',y/0100-1?0:(signed char)E(*L(P++,0))),(a+127&&a+'}'&&a+1?(a+61&&a+24&&a+025?(P=a+'H'&&a%061<=0?P:i,d+=sprintf( d,a>0?" R[%d]=E(~-E(R[%d])),\0 U R[%d],\0 R[%d] O,\0 U %d,\0R[%d]=0,"+(a&'8')*3:a <- 'c'?" %d, %c%s = R[%d], \0 %d, *R=%c%s==R[%d], \0 R[%d]=(int)%c%s,"-a%'w'%'j'*5:"%d,%d,%s=%d,",a>0?a-'h'?a-49?a&7:(y/010&7):(P+=4,*L(P-4,0)):(y/010&7),a>0?a&7:"& "[a%3%2+1],a+72?Q:"*R",a>0|a<-99?(y/010&7):(P+=4,*L(P-4,0)),0 ),(char* ) P):(P=i,i=a+61?a+21?E((P+=4,*L(P-4,0))):(signed char)E(*L(P++,0)):0,d+=sprintf( d,a%' '+29+"P O,\0 U %d,P=%d,",P,P+i,0,0,0 ),(char* ) P,system((sprintf(d,"A'",k[1]),b)),z)):(n=(y/010&7)-4?(y/010&7)%5-1?a+127?(signed char)E(*L(P++,0)):(P+=4,*L(P-4,0)):0:(Scan(),*( (char*)index(ss+V(i ),0100)?(char*)index(ss+V(i ),0100) :d)=0,(int)(ss+V(i))),(y/010&7)%5<2?d+=sprintf( d,(y/010&7)%5?" %s=E(~-E(%s)), \0 U %s,"+4*(y/010&7):"%s=E(E(%s)%c%d),",Q,Q,"+ - "[(y/010&7)],n,0 ),(char* ) P:(a=(signed char)E(*L(P++,0))-'u'?'!':'=',d+=sprintf( d,(y/010&7)-4?"P=%d%c=%s?%d:%d,":"*R=E(((int(*)(l,l,l))%s)(K(1),K(2),K(3))),P O,",n,a,Q,P,P+(signed char)E(*L(P++,0)) ),(char* ) P,system((sprintf(d,"A'",k[1]),b)),z)))):(Run((z=(char*)&ck,stat(k[1],&t),B=(l)mmap(0,i=t.st_size,PROT_READ|PROT_WRITE,1,open(k[1],2),0))),(((B+13)[4]=E(B+i/4),run(),P=V(-~i),(B+13)[4]=E(V(17)-4),*(int*)V(021))),sprintf(M,".%s%d",k[1],P),d+=sprintf( d,"%s %s '-DX=A(%s)' -o %s '-Dmagic=","cpp -std=gnu99 -Wall -Wextra -pedantic -Winfinite-recursion -Wno-bitwise-conditional-parentheses -Wno-error -Wno-implicit-function-declaration -Wno-implicit-int -Wno-int-to-pointer-cast -Wno-macro-redefined -Wno-pedantic -Wno-pointer-to-int-cast -Wno-return-type -Wno-string-plus-int -Wno-bitwise-op-parentheses -Wno-format -Wno-format-extra-args -Wno-int-conversion -Wno-unused-parameter -Wno-unsequenced -E \"-DA(X)=#X\"","anonymous.c","cpp -std=gnu99 -Wall -Wextra -pedantic -Winfinite-recursion -Wno-bitwise-conditional-parentheses -Wno-error -Wno-implicit-function-declaration -Wno-implicit-int -Wno-int-to-pointer-cast -Wno-macro-redefined -Wno-pedantic -Wno-pointer-to-int-cast -Wno-return-type -Wno-string-plus-int -Wno-bitwise-op-parentheses -Wno-format -Wno-format-extra-args -Wno-int-conversion -Wno-unused-parameter -Wno-unsequenced -E \"-DA(X)=#X\"",M,fflush(0) ),(char* ) P));
|
||||
}
|
||||
int
|
||||
main (int cka, char **k) { char *ck = (char *)cka;
|
||||
exit(E((ck?pain((char*)cka,k):system((sprintf(M,"rm -f .%s*",k[1]),M)),z,*(B+13))));
|
||||
}
|
||||
Reference in new issue
Block a user