Skip to content
Snippets Groups Projects

memcmp in BIR

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.

    BIR representation of UCRT's memcmp implementation distributed with VS Community 2022 (17.5).

    Analysed with options: -dbir --optimization-level=3 --bil-enable-intrinsics=llvm:lfence

    Edited
    memcmp.bir 8.48 KiB
    00494ef8: sub memcmp(memcmp_s1, memcmp_s2, memcmp_n, memcmp_result)
    0049cde9: memcmp_s1 :: in out u64 = RDI
    0049cdea: memcmp_s2 :: in out u64 = RSI
    0049cdeb: memcmp_n :: in u64 = RDX
    0049cdec: memcmp_result :: out u32 = RAX
    001452e3: 
    00145316: RDX := RDX - RCX
    0014534d: #12567515 := R8 - 8
    00145351: CF := R8 < 8
    00145361: PF := ~low:1[let $2660 = #12567515 >> 4 ^ #12567515 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00145369: ZF := 0 = #12567515
    00145370: when CF  goto %0014536d
    00494ef9: goto %00146ee5
    
    00146ee5: 
    00146ef5: #12567338 := low:8[RCX] & 7
    00146efb: CF := 0
    00146f03: PF := ~low:1[let $2660 = #12567338 >> 4 ^ #12567338 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146f0b: ZF := 0 = #12567338
    00146f12: when ZF  goto %00146f0f
    00494efa: goto %00146f55
    
    00146f55: 
    00494efb: goto %00146f57
    
    00146f57: 
    00146f61: RAX := high:56[RAX].mem[RCX]
    00146f88: #12567334 := low:8[RAX] - mem[RCX + RDX]
    00146f8f: CF := low:8[RAX] < mem[RCX + RDX]
    00146fa5: PF := ~low:1[let $2660 = #12567334 >> 4 ^ #12567334 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146fad: ZF := 0 = #12567334
    00146fb3: when ~ZF  goto %001453d5
    00494efc: goto %00146fb7
    
    00146fb7: 
    00146fd3: RCX := RCX + 1
    00147009: R8 := R8 - 1
    00147021: ZF := 0 = R8
    00147033: #12567328 := low:8[RCX] & 7
    00147039: CF := 0
    00147041: PF := ~low:1[let $2660 = #12567328 >> 4 ^ #12567328 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00147049: ZF := 0 = #12567328
    0014704f: when ~ZF  goto %00146f57
    00494efd: goto %00146f0f
    
    00146f0f: 
    00146f1b: R9 := R8
    00146f30: #12567336 := R9
    00146f34: R9 := R9 >> 3
    00146f38: CF := high:1[#12567336 << 0x3D]
    00146f40: ZF := 0 = R9
    00146f45: PF := ~low:1[let $2660 = R9 >> 4 ^ R9 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146f51: when ~ZF  goto %0014547d
    00494efe: goto %0014536d
    
    0014547d: 
    00145490: #12567503 := R9
    00145494: R9 := R9 >> 2
    00145498: CF := high:1[#12567503 << 0x3E]
    001454a0: ZF := 0 = R9
    001454a5: PF := ~low:1[let $2660 = R9 >> 4 ^ R9 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    001454b2: when ZF  goto %001454af
    00494eff: goto %00146bf5
    
    00146bf5: 
    00146bfd: RAX := mem[RCX, el]:u64
    00146c24: #12567358 := RAX - mem[RCX + RDX, el]:u64
    00146c2b: CF := RAX < mem[RCX + RDX, el]:u64
    00146c41: PF := ~low:1[let $2660 = #12567358 >> 4 ^ #12567358 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146c49: ZF := 0 = #12567358
    00146c4f: when ~ZF  goto %0014554d
    00494f00: goto %00146c53
    
    00146c53: 
    00146c5b: RAX := mem[RCX + 8, el]:u64
    00146c82: #12567356 := RAX - mem[RCX + RDX + 8, el]:u64
    00146c89: CF := RAX < mem[RCX + RDX + 8, el]:u64
    00146c9f: PF := ~low:1[let $2660 = #12567356 >> 4 ^ #12567356 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146ca7: ZF := 0 = #12567356
    00146cad: when ~ZF  goto %00146bb5
    00494f01: goto %00146cb1
    
    00146cb1: 
    00146cb9: RAX := mem[RCX + 0x10, el]:u64
    00146ce0: #12567354 := RAX - mem[RCX + RDX + 0x10, el]:u64
    00146ce7: CF := RAX < mem[RCX + RDX + 0x10, el]:u64
    00146cfd: PF := ~low:1[let $2660 = #12567354 >> 4 ^ #12567354 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146d05: ZF := 0 = #12567354
    00146d0b: when ~ZF  goto %00146b75
    00494f02: goto %00146d0f
    
    00146d0f: 
    00146d17: RAX := mem[RCX + 0x18, el]:u64
    00146d3e: #12567352 := RAX - mem[RCX + RDX + 0x18, el]:u64
    00146d5b: PF := ~low:1[let $2660 = #12567352 >> 4 ^ #12567352 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146d63: ZF := 0 = #12567352
    00146d69: when ~ZF  goto %00146b35
    00494f03: goto %00146d6d
    
    00146b35: 
    00146b50: #12567367 := RCX
    00146b54: RCX := RCX + 8
    00146b59: CF := RCX < #12567367
    00146b6b: PF := ~low:1[let $2660 = RCX >> 4 ^ RCX in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146b73: ZF := 0 = RCX
    00494f04: goto %00146b75
    
    00146b75: 
    00146b90: #12567364 := RCX
    00146b94: RCX := RCX + 8
    00146b99: CF := RCX < #12567364
    00146bab: PF := ~low:1[let $2660 = RCX >> 4 ^ RCX in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146bb3: ZF := 0 = RCX
    00494f05: goto %00146bb5
    
    00146bb5: 
    00146bd0: #12567361 := RCX
    00146bd4: RCX := RCX + 8
    00146bd9: CF := RCX < #12567361
    00146beb: PF := ~low:1[let $2660 = RCX >> 4 ^ RCX in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146bf3: ZF := 0 = RCX
    00494f06: goto %0014554d
    
    00146d6d: 
    00146d88: #12567350 := RCX
    00146d8c: RCX := RCX + 0x20
    00146d91: CF := RCX < #12567350
    00146dab: ZF := 0 = RCX
    00146dc7: R9 := R9 - 1
    00146dd7: PF := ~low:1[let $2660 = R9 >> 4 ^ R9 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146ddf: ZF := 0 = R9
    00146de5: when ~ZF  goto %00146bf5
    00494f07: goto %00146de9
    
    00146de9: 
    00146df9: R8 := R8 & 0x1F
    00146dff: CF := 0
    00146e07: PF := ~low:1[let $2660 = R8 >> 4 ^ R8 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146e0f: ZF := 0 = R8
    00494f08: goto %001454af
    
    001454af: 
    001454bb: R9 := R8
    001454d0: #12567501 := R9
    001454d4: R9 := R9 >> 3
    001454d8: CF := high:1[#12567501 << 0x3D]
    001454e0: ZF := 0 = R9
    001454e5: PF := ~low:1[let $2660 = R9 >> 4 ^ R9 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    001454f1: when ZF  goto %0014536d
    00494f09: goto %001454f5
    
    001454f5: 
    001454fd: RAX := mem[RCX, el]:u64
    00145524: #12567499 := RAX - mem[RCX + RDX, el]:u64
    0014552b: CF := RAX < mem[RCX + RDX, el]:u64
    00145541: PF := ~low:1[let $2660 = #12567499 >> 4 ^ #12567499 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00145549: ZF := 0 = #12567499
    00145550: when ~ZF  goto %0014554d
    00494f0a: goto %00146a8d
    
    0014554d: 
    0014555d: RCX := mem[RDX + RCX, el]:u64
    00145573: RAX := extract:7:0[RAX].extract:15:8[RAX].extract:23:16[RAX].extract:31:24[RAX].extract:39:32[RAX].extract:47:40[RAX].extract:55:48[RAX].extract:63:56[RAX]
    00145589: RCX := extract:7:0[RCX].extract:15:8[RCX].extract:23:16[RCX].extract:31:24[RCX].extract:39:32[RCX].extract:47:40[RCX].extract:55:48[RCX].extract:63:56[RCX]
    001455ab: CF := RAX < RCX
    001455ea: #12567495 := low:32[RAX]
    001455ee: #12567494 := low:32[RAX]
    001455f4: RAX := pad:64[#12567494 - #12567495 + pad:32[CF]]
    00145604: CF := #12567494 < #12567495 + pad:32[CF] | #12567495 + pad:32[CF] < #12567495
    00145634: #12567491 := low:32[RAX]
    00145639: RAX := pad:64[#12567491 - 0xFFFFFFFF + pad:32[CF]]
    0014564f: PF := ~low:1[let $2660 = low:32[RAX] >> 4 ^ low:32[RAX] in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00145657: ZF := 0 = low:32[RAX]
    00145664: #12567489 := mem[RSP, el]:u64
    00145668: RSP := RSP + 8
    0014566b: call #12567489 with noreturn
    
    00146a8d: 
    00146aa8: #12567373 := RCX
    00146aac: RCX := RCX + 8
    00146ab1: CF := RCX < #12567373
    00146acb: ZF := 0 = RCX
    00146ae7: R9 := R9 - 1
    00146af7: PF := ~low:1[let $2660 = R9 >> 4 ^ R9 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146aff: ZF := 0 = R9
    00146b05: when ~ZF  goto %001454f5
    00494f0b: goto %00146b09
    
    00146b09: 
    00146b19: R8 := R8 & 7
    00146b1f: CF := 0
    00146b27: PF := ~low:1[let $2660 = R8 >> 4 ^ R8 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146b2f: ZF := 0 = R8
    00146b33: goto %0014536d
    
    0014536d: 
    00145383: #12567513 := R8
    00145389: CF := 0
    00145391: PF := ~low:1[let $2660 = #12567513 >> 4 ^ #12567513 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00145399: ZF := 0 = #12567513
    001453a0: when ZF  goto %0014539d
    00494f0c: goto %00146e11
    
    00146e11: 
    00146e1b: RAX := high:56[RAX].mem[RCX]
    00146e42: #12567344 := low:8[RAX] - mem[RCX + RDX]
    00146e49: CF := low:8[RAX] < mem[RCX + RDX]
    00146e5f: PF := ~low:1[let $2660 = #12567344 >> 4 ^ #12567344 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146e67: ZF := 0 = #12567344
    00146e6d: when ~ZF  goto %001453d5
    00494f0d: goto %00146e71
    
    001453d5: 
    001453f8: #12567510 := low:32[RAX]
    001453fc: #12567509 := low:32[RAX]
    00145402: RAX := pad:64[#12567509 - #12567510 + pad:32[CF]]
    00145412: CF := #12567509 < #12567510 + pad:32[CF] | #12567510 + pad:32[CF] < #12567510
    00145442: #12567506 := low:32[RAX]
    00145447: RAX := pad:64[#12567506 - 0xFFFFFFFF + pad:32[CF]]
    0014545d: PF := ~low:1[let $2660 = low:32[RAX] >> 4 ^ low:32[RAX] in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00145465: ZF := 0 = low:32[RAX]
    00145472: #12567504 := mem[RSP, el]:u64
    00145476: RSP := RSP + 8
    00145479: call #12567504 with noreturn
    
    00146e71: 
    00146e8d: RCX := RCX + 1
    00146ea7: ZF := 0 = RCX
    00146ec3: R8 := R8 - 1
    00146ed3: PF := ~low:1[let $2660 = R8 >> 4 ^ R8 in let $2661 = $2660 >> 2 ^ $2660 in $2661 >> 1 ^ $2661]
    00146edb: ZF := 0 = R8
    00146ee1: when ~ZF  goto %00146e11
    00494f0e: goto %0014539d
    
    0014539d: 
    001453ad: RAX := 0
    001453b3: ZF := 1
    001453b6: PF := 1
    001453cc: #12567511 := mem[RSP, el]:u64
    001453d0: RSP := RSP + 8
    001453d3: call #12567511 with noreturn
    
    • Hollie Cleveland @HollieCleveland ·

      Comprehensive Guides for Analytical and Reflective Essays are essential for structuring your thoughts and presenting a well-organized argument. If you're preparing for a speech, consider using funny persuasive speech topics that will not only entertain but also engage your audience, leaving them with memorable takeaways.

    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment