Fixture 54
sha256 block
C · 1 functions · 4 lanes · 0 of 4 function-lanes behave identically
4 of 4 lanes have a function that returns a different result after decompilation: clang-O0 (0/1), clang-O2 (0/1), gcc-O0 (0/1), gcc-O2 (0/1).
One SHA-256 compression over a single 512-bit block. A 64-entry constant table in read-only data, a message schedule with four rotations per step, and eight rotating working registers: this is the densest constant-and- rotation recovery case in the corpus.
#include <stdint.h>
/* One SHA-256 compression over a single 512-bit block. A 64-entry constant
* table in read-only data, a message schedule with four rotations per step,
* and eight rotating working registers: this is the densest constant-and-
* rotation recovery case in the corpus. */
static const uint32_t SHA256_K[64] = {
0x428A2F98u, 0x71374491u, 0xB5C0FBCFu, 0xE9B5DBA5u, 0x3956C25Bu,
0x59F111F1u, 0x923F82A4u, 0xAB1C5ED5u, 0xD807AA98u, 0x12835B01u,
0x243185BEu, 0x550C7DC3u, 0x72BE5D74u, 0x80DEB1FEu, 0x9BDC06A7u,
0xC19BF174u, 0xE49B69C1u, 0xEFBE4786u, 0x0FC19DC6u, 0x240CA1CCu,
0x2DE92C6Fu, 0x4A7484AAu, 0x5CB0A9DCu, 0x76F988DAu, 0x983E5152u,
0xA831C66Du, 0xB00327C8u, 0xBF597FC7u, 0xC6E00BF3u, 0xD5A79147u,
0x06CA6351u, 0x14292967u, 0x27B70A85u, 0x2E1B2138u, 0x4D2C6DFCu,
0x53380D13u, 0x650A7354u, 0x766A0ABBu, 0x81C2C92Eu, 0x92722C85u,
0xA2BFE8A1u, 0xA81A664Bu, 0xC24B8B70u, 0xC76C51A3u, 0xD192E819u,
0xD6990624u, 0xF40E3585u, 0x106AA070u, 0x19A4C116u, 0x1E376C08u,
0x2748774Cu, 0x34B0BCB5u, 0x391C0CB3u, 0x4ED8AA4Au, 0x5B9CCA4Fu,
0x682E6FF3u, 0x748F82EEu, 0x78A5636Fu, 0x84C87814u, 0x8CC70208u,
0x90BEFFFAu, 0xA4506CEBu, 0xBEF9A3F7u, 0xC67178F2u};
static uint32_t rotate_right(uint32_t value, uint32_t amount) {
return (value >> amount) | (value << (32u - amount));
}
__attribute__((noinline)) uint32_t
sha256_compress_block(const uint32_t *block, uint32_t *state_out) {
uint32_t schedule[64];
uint32_t a, b, c, d, e, f, g, h;
int32_t step;
if (block == 0 || state_out == 0) {
return 0;
}
for (step = 0; step < 16; ++step) {
schedule[step] = block[step];
}
for (step = 16; step < 64; ++step) {
uint32_t s0 = rotate_right(schedule[step - 15], 7) ^
rotate_right(schedule[step - 15], 18) ^
(schedule[step - 15] >> 3);
uint32_t s1 = rotate_right(schedule[step - 2], 17) ^
rotate_right(schedule[step - 2], 19) ^
(schedule[step - 2] >> 10);
schedule[step] = schedule[step - 16] + s0 + schedule[step - 7] + s1;
}
a = 0x6A09E667u;
b = 0xBB67AE85u;
c = 0x3C6EF372u;
d = 0xA54FF53Au;
e = 0x510E527Fu;
f = 0x9B05688Cu;
g = 0x1F83D9ABu;
h = 0x5BE0CD19u;
for (step = 0; step < 64; ++step) {
uint32_t big1 = rotate_right(e, 6) ^ rotate_right(e, 11) ^
rotate_right(e, 25);
uint32_t choose = (e & f) ^ ((~e) & g);
uint32_t temp1 = h + big1 + choose + SHA256_K[step] + schedule[step];
uint32_t big0 = rotate_right(a, 2) ^ rotate_right(a, 13) ^
rotate_right(a, 22);
uint32_t majority = (a & b) ^ (a & c) ^ (b & c);
uint32_t temp2 = big0 + majority;
h = g;
g = f;
f = e;
e = d + temp1;
d = c;
c = b;
b = a;
a = temp1 + temp2;
}
state_out[0] = 0x6A09E667u + a;
state_out[1] = 0xBB67AE85u + b;
state_out[2] = 0x3C6EF372u + c;
state_out[3] = 0xA54FF53Au + d;
state_out[4] = 0x510E527Fu + e;
state_out[5] = 0x9B05688Cu + f;
state_out[6] = 0x1F83D9ABu + g;
state_out[7] = 0x5BE0CD19u + h;
return state_out[0] ^ state_out[7];
} Recovered C
Generated by glaurung decompile --style decbench at b47f6b43.
baseline.json records the result after recompiling the C and calling it beside the
original with seeded inputs.
clang -O0
0/1sha256_compress_block fail 107 lines
// glaurung: sha256_compress_block @ 0x1100
__attribute__((no_stack_protector)) uint32_t sha256_compress_block(const uint32_t * arg0, uint32_t * arg1) {
extern unsigned int rotate_right(unsigned int, unsigned int);
int step;
unsigned int s0;
unsigned int s1;
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int d;
unsigned int e;
unsigned int f;
unsigned int g;
unsigned int h;
unsigned int big1;
unsigned int choose;
unsigned int temp1;
unsigned int big0;
unsigned int majority;
unsigned int temp2;
unsigned char local_120[256];
int local_168;
int local_16c;
int local_170;
int local_174;
int local_178;
int local_17c;
int local_4;
unsigned int var120;
unsigned int var122;
unsigned int var128;
unsigned int var14;
unsigned int var20;
unsigned int var40;
unsigned int var46;
unsigned int var84;
unsigned int var86;
unsigned int var92;
// x86-64 prologue: save rbp, frame 384 bytes
if ((arg0 == 0)) {
// x86-64 epilogue: restore rbp
return 0;
}
if ((arg1 == 0)) {
// x86-64 epilogue: restore rbp
return 0;
}
for (step = 0; ((long)(step) < 16); step++) {
*(int *)((&local_120[0] + ((long)(step) * 4))) = arg0[(long)(step)];
}
for (step = 16; ((long)(step) < 64); step++) {
var14 = rotate_right((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 15))) * 4))))), 7);
local_16c = var14;
var20 = rotate_right((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 15))) * 4))))), 18);
s0 = ((unsigned int)(((unsigned long)((unsigned int)(local_16c)) ^ var20)) ^ (unsigned int)(((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 15))) * 4))))) >> 3)));
var40 = rotate_right((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 2))) * 4))))), 17);
local_168 = var40;
var46 = rotate_right((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 2))) * 4))))), 19);
s1 = ((unsigned int)(((unsigned long)((unsigned int)(local_168)) ^ var46)) ^ (unsigned int)(((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 2))) * 4))))) >> 10)));
*(int *)((&local_120[0] + ((long)(step) * 4))) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 16))) * 4))))) + s0))) + *(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 7))) * 4)))))) + s1);
}
a = 0x6a09e667;
b = -0x4498517bLL;
c = 0x3c6ef372;
d = -0x5ab00ac6LL;
e = 0x510e527f;
f = -0x64fa9774LL;
g = 0x1f83d9ab;
h = 0x5be0cd19;
for (step = 0; ((long)(step) < 64); step++) {
var84 = rotate_right(e, 6);
local_17c = var84;
var86 = rotate_right(e, 11);
local_178 = ((unsigned int)(local_17c) ^ var86);
var92 = rotate_right(e, 25);
big1 = ((unsigned int)(local_178) ^ var92);
choose = ((unsigned int)((e & f)) ^ (unsigned int)(((unsigned long)((unsigned int)((e ^ -1))) & g)));
temp1 = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((h + big1))) + choose))) + *(int *)((0x2000 + ((long)(step) * 4))))) + *(int *)((&local_120[0] + ((long)(step) * 4))));
var120 = rotate_right(a, 2);
local_174 = var120;
var122 = rotate_right(a, 13);
local_170 = ((unsigned int)(local_174) ^ var122);
var128 = rotate_right(a, 22);
big0 = ((unsigned int)(local_170) ^ var128);
majority = ((unsigned int)(((unsigned long)((unsigned int)((a & b))) ^ (unsigned long)((unsigned int)((a & c))))) ^ (unsigned int)((b & c)));
temp2 = (big0 + majority);
h = g;
g = f;
f = e;
e = (d + temp1);
d = c;
c = b;
b = a;
a = (temp1 + temp2);
}
*(int *)((long)arg1) = (a + 0x6a09e667);
*(int *)(((long)arg1 + 0x4)) = (b - 0x4498517b);
*(int *)(((long)arg1 + 0x8)) = (c + 0x3c6ef372);
*(int *)(((long)arg1 + 0xc)) = (d - 0x5ab00ac6);
*(int *)(((long)arg1 + 0x10)) = (e + 0x510e527f);
*(int *)(((long)arg1 + 0x14)) = (f - 0x64fa9774);
*(int *)(((long)arg1 + 0x18)) = (g + 0x1f83d9ab);
*(int *)(((long)arg1 + 0x1c)) = (h + 0x5be0cd19);
local_4 = ((unsigned int)(*(int *)((long)arg1)) ^ *(int *)(((long)arg1 + 0x1c)));
// x86-64 epilogue: restore rbp
return (unsigned int)(local_4);
} clang -O2
0/1sha256_compress_block fail 161 lines
// glaurung: sha256_compress_block @ 0x1100
__attribute__((no_stack_protector)) uint32_t sha256_compress_block(const uint32_t * arg0, uint32_t * arg1) {
int step;
unsigned int h;
unsigned int a;
unsigned int b;
unsigned int big0;
unsigned int big1;
unsigned int c;
unsigned int d;
unsigned int e;
unsigned int f;
unsigned int g;
unsigned int majority;
unsigned int s0;
unsigned int s1;
unsigned int temp1;
unsigned int temp2;
unsigned char local_134[308];
unsigned char local_138[4];
unsigned char local_140[8];
unsigned char local_154[20];
unsigned char local_174[32];
long rbp;
long ret;
long var1;
int var10;
int var106;
int var11;
int var12;
int var13;
long var132;
int var133;
long var135;
int var14;
int var15;
int var16;
int var17;
unsigned char var18[16] __attribute__((aligned(16)));
long var2;
long var20;
long var21;
long var23;
long var26;
long var3;
long var4;
long var5;
long var63;
long var64;
long var65;
long var66;
long var67;
long var68;
long var69;
int var7;
long var70;
long var71;
long var72;
long var74;
long var75;
long var76;
int var8;
long var80;
long var81;
long var82;
int var9;
ret = 0;
if ((arg0 == 0)) {
return ret;
}
if ((arg1 == 0)) {
return ret;
}
*(long *)((&local_134[0] + 300)) = rbp;
*(long *)((&local_134[0] + 292)) = var1;
*(long *)((&local_134[0] + 284)) = var2;
*(long *)((&local_134[0] + 276)) = var3;
*(long *)((&local_134[0] + 268)) = var4;
*(long *)((&local_134[0] + 260)) = var5;
var7 = *(int *)(((long)arg0 + 0x4));
var8 = *(int *)(((long)arg0 + 0x8));
var9 = *(int *)(((long)arg0 + 0xc));
var10 = *(int *)(((long)arg0 + 0x10));
var11 = *(int *)(((long)arg0 + 0x14));
var12 = *(int *)(((long)arg0 + 0x18));
var13 = *(int *)(((long)arg0 + 0x1c));
var14 = *(int *)(((long)arg0 + 0x20));
var15 = *(int *)(((long)arg0 + 0x24));
var16 = *(int *)(((long)arg0 + 0x28));
var17 = *(int *)(((long)arg0 + 0x2c));
__builtin_memcpy(var18, (void *)(((long)arg0 + 0x30)), 16);
*(int *)(&local_138[0]) = *(int *)(((long)arg0));
*(int *)(&local_134[0]) = var7;
*(int *)((&local_134[0] + 4)) = var8;
*(int *)((&local_134[0] + 8)) = var9;
__builtin_memmove((void *)((&local_134[0] + 44)), var18, 16);
*(int *)((&local_134[0] + 28)) = var14;
*(int *)((&local_134[0] + 32)) = var15;
*(int *)((&local_134[0] + 36)) = var16;
*(int *)((&local_134[0] + 40)) = var17;
*(int *)((&local_134[0] + 12)) = var10;
*(int *)((&local_134[0] + 16)) = var11;
*(int *)((&local_134[0] + 20)) = var12;
*(int *)((&local_134[0] + 24)) = var13;
var20 = (unsigned long)((unsigned int)(*(int *)(&local_138[0])));
var21 = (unsigned long)((unsigned int)(var20));
step = 16;
do {
var23 = (unsigned long)((unsigned int)(*(int *)((&local_174[0] + (step * 4)))));
var26 = (unsigned long)((unsigned int)(*(int *)((&local_140[0] + (step * 4)))));
*(int *)((&local_138[0] + (step * 4))) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var23)) >> 3))) ^ (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var23)) << 14) | ((unsigned long)((unsigned int)(var23)) >> 18)) ^ (((unsigned long)((unsigned int)(var23)) << 25) | ((unsigned long)((unsigned int)(var23)) >> 7)))))))) + var21))) + *(int *)((&local_154[0] + (step * 4)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var26)) >> 10))) ^ (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var26)) << 13) | ((unsigned long)((unsigned int)(var26)) >> 19)) ^ (((unsigned long)((unsigned int)(var26)) << 15) | ((unsigned long)((unsigned int)(var26)) >> 17)))))))));
step = (step + 1);
var21 = (unsigned long)((unsigned int)(var23));
} while ((step != 64));
var63 = 0;
var64 = (long)(0x2000);
var65 = 0x3c6ef372;
var66 = 0xbb67ae85;
var67 = 0x9b05688c;
var68 = 0xa54ff53a;
var69 = 0x1f83d9ab;
var70 = 0x5be0cd19;
var71 = 0x6a09e667;
var72 = 0x510e527f;
while (1) {
var74 = (unsigned long)((unsigned int)(var69));
var75 = (unsigned long)((unsigned int)(var67));
var76 = (unsigned long)((unsigned int)(var72));
var80 = (unsigned long)((unsigned int)(var65));
var81 = (unsigned long)((unsigned int)(var66));
var82 = (unsigned long)((unsigned int)(var71));
var106 = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((~(unsigned long)((unsigned int)(var72))) & (unsigned long)((unsigned int)(var69))))) + (unsigned long)((unsigned int)(var70))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var72)) & (unsigned long)((unsigned int)(var67)))))))) + (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var72)) << 7) | ((unsigned long)((unsigned int)(var72)) >> 25)) ^ (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var72)) << 21) | ((unsigned long)((unsigned int)(var72)) >> 11)) ^ (((unsigned long)((unsigned int)(var72)) << 26) | ((unsigned long)((unsigned int)(var72)) >> 6))))))))))) + *(int *)((var63 + var64)))) + var20);
var72 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var68)) + (unsigned long)((unsigned int)(var106)))));
var132 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var66)) & (unsigned long)((unsigned int)(var65))))) ^ (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var66)) ^ (unsigned long)((unsigned int)(var65))))) & (unsigned long)((unsigned int)(var71)))))))) + (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var71)) << 10) | ((unsigned long)((unsigned int)(var71)) >> 22)) ^ (unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var71)) << 19) | ((unsigned long)((unsigned int)(var71)) >> 13)) ^ (((unsigned long)((unsigned int)(var71)) << 30) | ((unsigned long)((unsigned int)(var71)) >> 2))))))))))) + (unsigned long)((unsigned int)(var106)))));
if ((var63 == 252)) {
break;
}
var20 = (unsigned long)((unsigned int)(*(int *)((&local_134[0] + var63))));
var63 = (var63 + 4);
var65 = var81;
var66 = var82;
var67 = var76;
var68 = var80;
var69 = var75;
var70 = var74;
var71 = var132;
}
var133 = (var132 + 0x6a09e667);
var135 = (long)arg1;
*(int *)((long)arg1) = var133;
*(int *)((var135 + 0x4)) = (var82 - 0x4498517b);
*(int *)((var135 + 0x8)) = (var81 + 0x3c6ef372);
*(int *)((var135 + 0xc)) = (var80 - 0x5ab00ac6);
*(int *)((var135 + 0x10)) = (var72 + 0x510e527f);
*(int *)((var135 + 0x14)) = (var76 - 0x64fa9774);
*(int *)((var135 + 0x18)) = (var75 + 0x1f83d9ab);
h = (var74 + 0x5be0cd19);
*(int *)((var135 + 0x1c)) = h;
// x86-64 epilogue: tear down frame
return (unsigned int)(((unsigned long)(h) ^ (unsigned long)((unsigned int)(var133))));
} gcc -O0
0/1sha256_compress_block fail 109 lines
// glaurung: sha256_compress_block @ 0x1135
uint32_t sha256_compress_block(const uint32_t * arg0, uint32_t * arg1) {
extern __attribute__((noreturn)) void __stack_chk_fail(void);
extern unsigned int rotate_right(unsigned int, unsigned int);
int step;
unsigned int s0;
unsigned int s1;
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int d;
unsigned int e;
unsigned int f;
unsigned int g;
unsigned int h;
unsigned int big1;
unsigned int choose;
unsigned int temp1;
unsigned int big0;
unsigned int majority;
unsigned int temp2;
unsigned char local_120[256];
long local_18;
long ret;
long var101;
unsigned int var103;
unsigned int var135;
long var137;
unsigned int var139;
long var142;
unsigned int var144;
unsigned int var19;
long var21;
unsigned int var27;
unsigned int var47;
long var49;
unsigned int var55;
unsigned int var94;
long var96;
unsigned int var98;
// x86-64 prologue: save rbp, frame 8 bytes
local_18 = (long)(0x28);
if (((arg0 == 0) || (arg1 == 0))) {
ret = 0;
} else {
for (step = 0; ((((unsigned long)((unsigned int)(step)) == 15) | ((long)(step) < 15)) != 0); step++) {
*(int *)((&local_120[0] + ((long)(step) * 4))) = arg0[(long)(step)];
}
for (step = 16; ((((unsigned long)((unsigned int)(step)) == 63) | ((long)(step) < 63)) != 0); step++) {
var19 = rotate_right((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 15))) * 4))))), 7);
var21 = (unsigned long)(var19);
var27 = rotate_right((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 15))) * 4))))), 18);
s0 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 15))) * 4))))) >> 3)) ^ (unsigned int)((var21 ^ var27)));
var47 = rotate_right((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 2))) * 4))))), 17);
var49 = (unsigned long)(var47);
var55 = rotate_right((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 2))) * 4))))), 19);
s1 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 2))) * 4))))) >> 10)) ^ (unsigned int)((var49 ^ var55)));
*(int *)((&local_120[0] + ((long)(step) * 4))) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 16))) * 4))))) + s0))) + (unsigned long)((unsigned int)(*(int *)((&local_120[0] + ((long)((int)(((unsigned long)((unsigned int)(step)) - 7))) * 4)))))))) + s1);
}
a = 0x6a09e667;
b = -0x4498517bLL;
c = 0x3c6ef372;
d = -0x5ab00ac6LL;
e = 0x510e527f;
f = -0x64fa9774LL;
g = 0x1f83d9ab;
h = 0x5be0cd19;
for (step = 0; ((((unsigned long)((unsigned int)(step)) == 63) | ((long)(step) < 63)) != 0); step++) {
var94 = rotate_right(e, 6);
var96 = (unsigned long)(var94);
var98 = rotate_right(e, 11);
var101 = (unsigned long)((unsigned int)((var96 ^ var98)));
var103 = rotate_right(e, 25);
big1 = (var103 ^ var101);
choose = ((unsigned int)(((~e) & g)) ^ (unsigned int)((e & f)));
temp1 = ((unsigned int)(*(int *)((&local_120[0] + ((long)(step) * 4)))) + (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((h + big1))) + choose))) + (unsigned long)((unsigned int)(*(int *)((((long)(step) * 4) + 0x2000)))))));
var135 = rotate_right(a, 2);
var137 = (unsigned long)(var135);
var139 = rotate_right(a, 13);
var142 = (unsigned long)((unsigned int)((var137 ^ var139)));
var144 = rotate_right(a, 22);
big0 = (var144 ^ var142);
majority = ((unsigned int)((b & c)) ^ (unsigned int)(((unsigned long)((unsigned int)((b ^ c))) & a)));
temp2 = (majority + big0);
h = g;
g = f;
f = e;
e = (temp1 + d);
d = c;
c = b;
b = a;
a = (temp2 + temp1);
}
*(int *)((long)arg1) = (a + 0x6a09e667);
*(int *)((arg1 + 1)) = (b - 0x4498517b);
*(int *)((arg1 + 2)) = (c + 0x3c6ef372);
*(int *)((arg1 + 3)) = (d - 0x5ab00ac6);
*(int *)((arg1 + 4)) = (e + 0x510e527f);
*(int *)((arg1 + 5)) = (f - 0x64fa9774);
*(int *)((arg1 + 6)) = (g + 0x1f83d9ab);
*(int *)((arg1 + 7)) = (h + 0x5be0cd19);
ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg1 + 7)))) ^ (unsigned long)((unsigned int)(*(int *)((long)arg1))))));
}
if ((local_18 != 0x28)) {
__stack_chk_fail();
}
// x86-64 epilogue: restore rbp
return ret;
} gcc -O2
0/1sha256_compress_block fail 149 lines
// glaurung: sha256_compress_block @ 0x1120
uint32_t sha256_compress_block(const uint32_t * arg0, uint32_t * arg1) {
extern __attribute__((noreturn)) void __stack_chk_fail(void);
unsigned int e;
unsigned int a;
unsigned int big0;
unsigned int big1;
unsigned int c;
unsigned int choose;
unsigned int d;
unsigned int g;
unsigned int h;
unsigned int majority;
unsigned int s0;
unsigned int s1;
unsigned int temp1;
unsigned int temp2;
unsigned char local_148[256];
long local_40;
long ret;
int var10;
int var104;
int var11;
long var113;
long var127;
long var128;
long var129;
int var13;
long var133;
int var14;
long var146;
int var15;
int var16;
int var17;
int var18;
int var19;
int var20;
long var21;
long var22;
long var23;
long var24;
int var5;
long var56;
long var57;
int var6;
long var66;
long var67;
long var68;
long var69;
int var7;
long var70;
long var71;
long var73;
int var8;
int var9;
int var96;
local_40 = (long)(0x28);
if (((arg0 == 0) || (arg1 == 0))) {
ret = 0;
} else {
var5 = *(int *)(((long)arg0 + 0x4));
var6 = *(int *)(((long)arg0 + 0x8));
var7 = *(int *)(((long)arg0 + 0xc));
var8 = *(int *)(((long)arg0 + 0x10));
var9 = *(int *)(((long)arg0 + 0x14));
var10 = *(int *)(((long)arg0 + 0x18));
var11 = *(int *)(((long)arg0 + 0x1c));
var13 = *(int *)(((long)arg0 + 0x20));
var14 = *(int *)(((long)arg0 + 0x24));
var15 = *(int *)(((long)arg0 + 0x28));
var16 = *(int *)(((long)arg0 + 0x2c));
var17 = *(int *)(((long)arg0 + 0x30));
var18 = *(int *)(((long)arg0 + 0x34));
var19 = *(int *)(((long)arg0 + 0x38));
var20 = *(int *)(((long)arg0 + 0x3c));
var21 = (long)(&local_148[0]);
var22 = (long)((&local_148[0] + 192));
*(int *)(&local_148[0]) = *(int *)(((long)arg0));
*(int *)((&local_148[0] + 4)) = var5;
*(int *)((&local_148[0] + 8)) = var6;
*(int *)((&local_148[0] + 12)) = var7;
*(int *)((&local_148[0] + 16)) = var8;
*(int *)((&local_148[0] + 20)) = var9;
*(int *)((&local_148[0] + 24)) = var10;
*(int *)((&local_148[0] + 28)) = var11;
*(int *)((&local_148[0] + 32)) = var13;
*(int *)((&local_148[0] + 36)) = var14;
*(int *)((&local_148[0] + 40)) = var15;
*(int *)((&local_148[0] + 44)) = var16;
*(int *)((&local_148[0] + 48)) = var17;
*(int *)((&local_148[0] + 52)) = var18;
*(int *)((&local_148[0] + 56)) = var19;
*(int *)((&local_148[0] + 60)) = var20;
do {
var23 = (unsigned long)((unsigned int)(*(int *)((var21 + 0x4))));
var24 = (unsigned long)((unsigned int)(*(int *)((var21 + 0x38))));
var21 = (var21 + 4);
*(int *)((var21 + 0x3c)) = ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var23)) >> 7) | ((unsigned long)((unsigned int)(var23)) << 25)) ^ (((unsigned long)((unsigned int)(var23)) << 14) | ((unsigned long)((unsigned int)(var23)) >> 18))))) ^ (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var23)) >> 3)))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var21 + 0x20)))) + *(int *)((var21 - 0x4)))))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((((unsigned long)((unsigned int)(var24)) << 15) | ((unsigned long)((unsigned int)(var24)) >> 17)) ^ (((unsigned long)((unsigned int)(var24)) << 13) | ((unsigned long)((unsigned int)(var24)) >> 19))))) ^ (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var24)) >> 10)))))));
} while ((var21 != var22));
var56 = 0;
var57 = 0x428a2f98;
var66 = (long)(0x2000);
var67 = 0x3c6ef372;
var68 = 0xbb67ae85;
var69 = 0xa54ff53a;
var70 = 0x9b05688c;
var71 = 0x1f83d9ab;
e = 0x510e527f;
var73 = 0x5be0cd19;
a = 0x6a09e667;
while (1) {
var96 = ((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((((unsigned int)(e) >> 6) | (e << 26)) ^ (((unsigned int)(e) >> 11) | (e << 21))))) ^ ((e << 7) | ((unsigned int)(e) >> 25))))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((~e) & var71))) ^ (unsigned long)((unsigned int)((e & var70)))))))) + *(int *)((&local_148[0] + var56)));
var56 = (var56 + 4);
var104 = ((unsigned int)(((unsigned long)((unsigned int)(var96)) + var73)) + var57);
var113 = (unsigned long)((unsigned int)((var69 + (unsigned long)((unsigned int)(var104)))));
var127 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var104)) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var68)) ^ var67))) & a))) ^ (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var68)) & var67)))))) + (unsigned long)((unsigned int)((((a << 10) | ((unsigned int)(a) >> 22)) ^ (unsigned long)((unsigned int)(((((unsigned int)(a) >> 13) | (a << 19)) ^ (((unsigned int)(a) >> 2) | (a << 30))))))))))))));
if ((var56 == 256)) {
break;
}
var57 = (unsigned long)((unsigned int)(*(int *)((var66 + var56))));
var128 = (unsigned long)((unsigned int)(var71));
var71 = (unsigned long)((unsigned int)(var70));
var70 = (unsigned long)(e);
e = (unsigned long)((unsigned int)(var113));
var129 = (unsigned long)((unsigned int)(var67));
var67 = (unsigned long)((unsigned int)(var68));
var68 = (unsigned long)(a);
var69 = var129;
var73 = var128;
a = (unsigned long)((unsigned int)(var127));
}
var133 = (unsigned long)((unsigned int)((var71 + 0x5be0cd19)));
*(int *)(((long)arg1 + 0x4)) = (a - 0x4498517b);
var146 = (unsigned long)((unsigned int)((var127 + 0x6a09e667)));
*(int *)(((long)arg1 + 0x8)) = (var68 + 0x3c6ef372);
*(int *)(((long)arg1 + 0xc)) = (var67 - 0x5ab00ac6);
*(int *)(((long)arg1 + 0x10)) = (var113 + 0x510e527f);
*(int *)(((long)arg1 + 0x14)) = (e - 0x64fa9774);
*(int *)(((long)arg1 + 0x18)) = (var70 + 0x1f83d9ab);
*(int *)(((long)arg1 + 0x1c)) = var133;
*(int *)((long)arg1) = var146;
ret = (unsigned long)((unsigned int)((var146 ^ var133)));
}
if ((local_40 != 0x28)) {
__stack_chk_fail();
}
// x86-64 epilogue: tear down frame
return ret;
}