Challenge RE #27
The challenge #27 is also a short one, but also kind of hacky because the resulting code is not intuitive at all. Here is the assembly code
_a$ = 8
_f	PROC
	mov	ecx, DWORD PTR _a$[esp-4]
	mov	eax, -968154503	; c64b2279H
	imul	ecx ;; edx = eax * ecx
	add	edx, ecx ;; edx += ecx
	sar	edx, 9  ;; edx >>= 9
	mov	eax, edx 
	shr	eax, 31		; 0000001fH => eax = eax >> 31
	add	eax, edx  ;; eax += edx 
	ret	0
_f	ENDP
Analysis
Getting this code into C code is not a hard task, comparing of course with previous cases. Here is the corresponding C code
int f(int a)
{
	int b = (0xc64b2279 * a + a) >> 9;
	return (b >> 31) + b;
}
I’m clueless with this one…no idea, I hate these hacky stuffs.
Conclusion
I’ll leave it unsolved.
