#!/usr/bin/env python3 """Bounded byte-addressed collision copies and world-result decisions.""" import gzip import itertools import json import math from pathlib import Path import re import struct from analyze_chat_crosshair import bits,number from analyze_engine_control import control_flow from analyze_qvm import write_json from analyze_vm_extensions import native_functions,verified def register(r): aliases={'eax':('rax',32),'ax':('rax',16),'dx':('rdx',16),'edi':('rdi',32),'esi':('rsi',32),'edx':('rdx',32), 'ecx':('rcx',32),'ebp':('rbp',32),'ebx':('rbx',32),'bx':('rbx',16),'bl':('rbx',8),'al':('rax',8),'sil':('rsi',8),'dl':('rdx',8),'cl':('rcx',8),'dil':('rdi',8),'bpl':('rbp',8)} r=r.lstrip('%') if r in aliases:return aliases[r] if re.fullmatch(r'r\d+d',r):return r[:-1],32 if re.fullmatch(r'r\d+b',r):return r[:-1],8 if re.fullmatch(r'r(?:ax|di|si|dx|cx|bp|bx|sp|ip|\d+)',r):return r,64 if re.fullmatch(r'xmm\d+',r):return r,32 raise ValueError('unsupported register '+r) def put_word(m,address,value,width=4): for i in range(width):m[address+i]=(value>>(8*i))&255 def get_word(m,address,width=4): if any(address+i not in m for i in range(width)):raise ValueError('unknown byte-addressed read') return sum(m[address+i]<<(8*i) for i in range(width)) def evaluate(graph,start,stops,memory,registers,limit=128,capture_registers=False): rows=graph['instructions'];indices={x['address']:i for i,x in enumerate(rows)} regs={register(k)[0]:v for k,v in registers.items()};m=dict(memory);equal=None;ge=greater=below=None;signed_le=signed_lt=negative=None;pc=start;trace=[];writes=[] def read_reg(name): key,size=register(name) if key not in regs:raise ValueError('unknown register '+name) return regs[key]&((1<=limit:raise ValueError('composition slice escaped bound') x=rows[indices[pc]];trace.append(pc);op=x['opcode'];args=x['operands'].split('#')[0].strip() i=indices[pc];pc=rows[i+1]['address'] if i+1=v if op in ['cmpl','cmpq','cmpb'] else True greater=w>v if op in ['cmpl','cmpq','cmpb'] else not equal below=w>amount if op=='sarl' else v>>amount if op=='shrl' else v<>(read(a,8)&63),8);equal=None;signed_le=signed_lt=negative=None;ge=greater=below=None elif op in ['xorl','xorb','orl','orb','andl','subl','addl','addq','subq']: width=8 if op in ['addq','subq'] else 1 if op in ['orb','xorb'] else 4 a,b=args.split(', ') v,w=(0,0) if op in ['xorl','xorb'] and a==b else (read(a,width),read(b,width)) result=v^w if op in ['xorl','xorb'] else v|w if op in ['orl','orb'] else v&w if op=='andl' else w-v if op in ['subl','subq'] else v+w write(b,result,width);equal=(result&((1<<(width*8))-1))==0 signed_le=signed_lt=negative=None;ge=greater=below=None elif op=='xorps': a,b=args.split(', ') if a!=b:raise ValueError('unsupported SIMD xor') write(b,0,4) # Does not change integer flags. elif op=='andps': a,b=args.split(', ');write(b,read(a,4)&read(b,4),4) elif op=='maxss': a,b=args.split(', ');v,w=number(read(a,4)),number(read(b,4)) write(b,read(b,4) if w>v else read(a,4),4) elif op=='sqrtss': a,b=args.split(', ');write(b,bits(math.sqrt(number(read(a,4)))),4) elif op in ['addss','subss','mulss']: a,b=args.split(', ');v,w=number(read(a,4)),number(read(b,4)) write(b,bits(w+v if op=='addss' else w-v if op=='subss' else w*v),4) elif op=='cvttss2si': a,b=args.split(', ') if register(b)[1]!=32:raise ValueError('unsupported non-int32 scalar conversion') v=number(read(a,4));value=int(v) if not -2**31<=value<2**31:raise ValueError('unsupported out-of-range scalar conversion') write(b,value,4) # Finite truncation only; exception/MXCSR state unmodeled. elif op=='cvtsi2sd': a,b=args.split(', ') if a.startswith('%') and register(a)[1]!=32:raise ValueError('unsupported non-int32 double conversion') v=read(a,4)&0xffffffff;v=v if v<2**31 else v-2**32 regs[register(b)[0]]=struct.unpack('=v;greater=w>v;below=w' in x['operands']) start=rows[call+2]['address'] # Start after file-backed 1.0 load; supply xmm2 explicitly. branch=next(i for i in range(call,len(rows)) if rows[i]['opcode']=='je') stop_yes=int(rows[branch]['operands'].split()[0],16);stop_no=rows[branch+1]['address'] world=[] for fraction in [0.0,-0.0,.25,1.0,1.5,-1.0]: m={};put_word(m,stack+0x64,bits(fraction)) t=evaluate(g,start,[stop_yes,stop_no],m,{'%rsp':stack,'%xmm2':bits(1), '%rax':0}) world.append({'fraction':fraction,'identifier_word':get_word(t['memory'],stack+0x90), 'skips_entity_clip_path':t['stop']==stop_yes,'trace':t['trace']}) out['native'][label]={'source':r['source'],'disassembly_sha256':a['uncompressed_sha256'], 'graphs':graphs,'lane_sites':lanes,'composition_traces':merges,'world_decision_traces':world} write_json(Path('docs/research/collision-composition.json'),out) print('Recovered 216 complete three-lane merge/copy slices and 12 world-result decisions') if __name__=='__main__':main()