Some day .... So I took a peak at the V5 crt0.s and guess what -- it matches! On Mon, Jan 6, 2020 at 4:08 PM Clem Cole wrote: > You got my curiosity up and found the V5 and V6 source code (I did not > have V4 easy to get, where I am today) ;-) > > A big clue of it being C will be having crt0.s (below) in the first few > bytes of the disassembled code. We see the a.out header (i.e. start at > offset 20 for the code) and look what's there. I'm going to guess that is > at 046 is the address of _main, from the call instruction at address 034. > The Trap 1 is a sys exit @ address 044. > But .. the V6 crt0.s source has a call to _exit, which is lacking in the > binary below. So it means that the binary was not created with the C > runtime and probably not the v6 C compiler in the sources. So I took a > peak at the V6 crt0.s and guess what -- it matches! > > So, I'm going to guess the binary was compiled and linked with an earlier > compiler. Ao ... if I had to guess, the programs are similar, but possibly > different. > > % more wump.das > ; > ; pdp11dasm version 0.0.3 > ; disassembly of wump > ; > 000000: 000407 br 20 ; .. > ; > 000002: 005334 dec @(r4)+ ; \. > 000004: 004524 jsr r5,(r4)+ ; T. > 000006: 002312 bge 37777777634 ; J. > 000010: 000000 halt ; .. > 000012: 000000 halt ; .. > 000014: 000000 halt ; .. > ; > 000016: 000001 wait ; .. > 000020: 170011 setd ; .p > 000022: 010600 mov r6,r0 ; .. > 000024: 011046 mov (r0),-(r6) ; &. > 000026: 005720 tst (r0)+ ; P. > 000030: 010066 000002 mov r0,2(r6) ; 6... > 000034: 004767 000006 call 46 ; w... > 000040: 022626 cmp (r6)+,(r6)+ ; .% > 000042: 005000 clr r0 ; .. > 000044: 104401 trap 1 ; .. > 000046: 004567 005174 jsr r5,5246 ; w.|. > 000052: 005746 tst -(r6) ; f. > 000054: 012716 011230 mov #11230,(r6) ; N... > 000060: 004737 002776 call @#2776 ; _.~. > 000064: 004767 002262 call 2352 ; w.2. > 000070: 022700 000171 cmp #171,r0 ; @%y. > 000074: 001027 bne 154 ; .. > 000076: 005004 clr r4 ; .. > 000100: 010400 mov r4,r0 ; .. > 000102: 006300 asl r0 ; @. > 000104: 005760 005334 tst 5334(r0) ; p.\. > 000110: 001421 beq 154 ; .. > 000112: 032704 000001 bit #1,r4 ; D5.. > 000116: 001403 beq 126 ; .. > 000120: 012716 000024 mov #24,(r6) ; N... > 000124: 000402 br 132 ; .. > ; > 000126: 012716 000003 mov #3,(r6) ; N... > 000132: 010400 mov r4,r0 ; .. > 000134: 006300 asl r0 ; @. > 000136: 016046 005334 mov 5334(r0),-(r6) ; &.\. > 000142: 004737 002776 call @#2776 ; _.~. > > > > > > V6: s4/crt0.s: > / C runtime startoff > > .globl savr5 > .globl _exit > > .globl _main > > start: > setd > mov sp,r0 > mov (r0),-(sp) > tst (r0)+ > mov r0,2(sp) > jsr pc,_main > mov r0,(sp) > jsr pc,*$_exit > sys exit > > .bss > savr5: .=.+2 > > V5: s4/crt0.s: > / C runtime startoff > > .globl savr5 > > .globl _main > > start: > setd > mov sp,r0 > mov (r0),-(sp) > tst (r0)+ > mov r0,2(sp) > jsr pc,_main > cmp (sp)+,(sp)+ > clr r0 > sys exit > > .bss > savr5: .=.+2 > > On Mon, Jan 6, 2020 at 1:48 PM Warner Losh wrote: > >> >> >> On Mon, Jan 6, 2020 at 11:38 AM Will Senn wrote: >> >>> On 1/6/20 12:29 PM, Warner Losh wrote: >>> >>> The good news is that disassembly will tell you right away if it was >>> written in C or not. >>> >>> >>> OK. I give up. How? >>> >> >> Generally, the C compiler generates code that's quite distinctive (at >> least PCC does, not sure about Dennis' compiler). People writing free >> assembler tend to do really weird things for function entry / return. >> >> And it will likely tell you if it's some weird wrapper around another >> binary, though that wasn't too common at bell labs. >> >> Warner >> >