|
// Decompiled code dump generated by CodeDumper |
|
|
|
// -------- |
|
#PTN v0 |
|
// @PTN LEGEND |
|
// Nodes: L(F,i)=local i in function F; P(F,i)=param i of F; G(addr)=global at addr; F(Fx)=function Fx. |
|
// Slices: @[off:len] in bytes; '?' unknown; '&' = address-of; '*' = deref; optional cast as :(type). |
|
// A: alias inside function => A: dst := src[@slice][mode][:cast] {meta} |
|
// I: inbound (caller→this) => I: origin -> P(F,i) {caller=F?,cs=0x...,conf=...} |
|
// E: outbound (this→callee) => E: origin -> A(F?,arg) [-> A(F?,arg)...] {cs=0x...,conf=...} |
|
// G: global touch/summary => G: F(F?) -> G(0xADDR) or G: F(writer) -> G(0xADDR) -> F(reader) |
|
// Dictionary entry (per function block): // @PTN D:F?=0xEA,Name |
|
// -------- |
|
|
|
// Start Function: 0x154D (main) |
|
// Caller Depth: 3 |
|
// Callee/Ref Depth: 3 |
|
// Total Functions Found: 19 |
|
// Included Functions (19): |
|
// - strncpy (0x4028) |
|
// - puts (0x4030) |
|
// - strlen (0x4038) |
|
// - __stack_chk_fail (0x4040) |
|
// - printf (0x4048) |
|
// - strcat (0x4050) |
|
// - .strncpy (0x10A0) |
|
// - .puts (0x10B0) |
|
// - .strlen (0x10C0) |
|
// - .__stack_chk_fail (0x10D0) |
|
// - .printf (0x10E0) |
|
// - .strcat (0x10F0) |
|
// - leaf_function_a (0x12A4) |
|
// - leaf_function_b (0x1304) |
|
// - create_untrusted_data (0x11E9) |
|
// - process_result (0x14E6) |
|
// - another_intermediate (0x141A) |
|
// - intermediate_function (0x1353) |
|
// - main (0x154D) |
|
// Removed Functions: None |
|
// ------------------------------------------------------------ |
|
|
|
// Incoming xrefs for strncpy (0x4028): .strncpy (0x10A0) [direct_call] |
|
// Outgoing xrefs for strncpy (0x4028): None |
|
// @PTN D:F14=0x4028,strncpy |
|
// @PTN I:L(F1,0)@[?:0x8] {conf=high,cs=0x10A4,caller=F1} -> P(F14,0) |
|
// @PTN I:L(F1,1)@[?:0x8] {conf=high,cs=0x10A4,caller=F1} -> P(F14,1) |
|
// @PTN I:L(F1,2)@[?:0x8] {conf=high,cs=0x10A4,caller=F1} -> P(F14,2) |
|
// --- Function: strncpy (0x4028) --- |
|
// Decompilation FAILED for strncpy (0x4028) - Decompiler returned None |
|
// --- End Function: strncpy (0x4028) --- |
|
|
|
// Incoming xrefs for puts (0x4030): .puts (0x10B0) [direct_call] |
|
// Outgoing xrefs for puts (0x4030): None |
|
// @PTN D:F15=0x4030,puts |
|
// @PTN I:L(F2,0)@[?:0x8] {conf=high,cs=0x10B4,caller=F2} -> P(F15,0) |
|
// --- Function: puts (0x4030) --- |
|
// Decompilation FAILED for puts (0x4030) - Decompiler returned None |
|
// --- End Function: puts (0x4030) --- |
|
|
|
// Incoming xrefs for strlen (0x4038): .strlen (0x10C0) [direct_call] |
|
// Outgoing xrefs for strlen (0x4038): None |
|
// @PTN D:F16=0x4038,strlen |
|
// @PTN I:L(F3,0)@[?:0x8] {conf=high,cs=0x10C4,caller=F3} -> P(F16,0) |
|
// --- Function: strlen (0x4038) --- |
|
// Decompilation FAILED for strlen (0x4038) - Decompiler returned None |
|
// --- End Function: strlen (0x4038) --- |
|
|
|
// Incoming xrefs for __stack_chk_fail (0x4040): .__stack_chk_fail (0x10D0) [direct_call] |
|
// Outgoing xrefs for __stack_chk_fail (0x4040): None |
|
// @PTN D:F17=0x4040,__stack_chk_fail |
|
// --- Function: __stack_chk_fail (0x4040) --- |
|
// Decompilation FAILED for __stack_chk_fail (0x4040) - Decompiler returned None |
|
// --- End Function: __stack_chk_fail (0x4040) --- |
|
|
|
// Incoming xrefs for printf (0x4048): .printf (0x10E0) [direct_call] |
|
// Outgoing xrefs for printf (0x4048): None |
|
// @PTN D:F18=0x4048,printf |
|
// @PTN I:L(F5,0)@[?:0x8] {conf=high,cs=0x10E4,caller=F5} -> P(F18,0) |
|
// --- Function: printf (0x4048) --- |
|
// Decompilation FAILED for printf (0x4048) - Decompiler returned None |
|
// --- End Function: printf (0x4048) --- |
|
|
|
// Incoming xrefs for strcat (0x4050): .strcat (0x10F0) [direct_call] |
|
// Outgoing xrefs for strcat (0x4050): None |
|
// @PTN D:F19=0x4050,strcat |
|
// @PTN I:L(F6,0)@[?:0x8] {conf=high,cs=0x10F4,caller=F6} -> P(F19,0) |
|
// @PTN I:L(F6,1)@[?:0x8] {conf=high,cs=0x10F4,caller=F6} -> P(F19,1) |
|
// --- Function: strcat (0x4050) --- |
|
// Decompilation FAILED for strcat (0x4050) - Decompiler returned None |
|
// --- End Function: strcat (0x4050) --- |
|
|
|
// Incoming xrefs for .strncpy (0x10A0): create_untrusted_data (0x11E9) [direct_call] |
|
// Outgoing xrefs for .strncpy (0x10A0): strncpy (0x4028) [direct_call] |
|
// @PTN D:F1=0x10A0,.strncpy |
|
// @PTN I:L(F7,7)@[0x4:0x8]:(char *) {conf=high,cs=0x1232,caller=F7} -> P(F1,0) |
|
// @PTN I:L(F7,1)@[?:0x8] {conf=high,cs=0x1232,caller=F7} -> P(F1,1) |
|
// @PTN I:U {conf=low,cs=0x1232,caller=F7} -> P(F1,2) |
|
// @PTN E:L(F1,0)@[?:0x8] {conf=high,cs=0x10A4} -> A(F14,0) |
|
// @PTN E:L(F1,1)@[?:0x8] {conf=high,cs=0x10A4} -> A(F14,1) |
|
// @PTN E:L(F1,2)@[?:0x8] {conf=high,cs=0x10A4} -> A(F14,2) |
|
// @PTN G:G(0x4028) -> F(F1) |
|
// --- Function: .strncpy (0x10A0) --- |
|
// attributes: thunk |
|
char *strncpy(char *dest, const char *src, size_t n) |
|
{ |
|
return strncpy(dest, src, n); |
|
} |
|
|
|
// --- End Function: .strncpy (0x10A0) --- |
|
|
|
// Incoming xrefs for .puts (0x10B0): process_result (0x14E6) [direct_call], main (0x154D) [direct_call] |
|
// Outgoing xrefs for .puts (0x10B0): puts (0x4030) [direct_call] |
|
// @PTN D:F2=0x10B0,.puts |
|
// @PTN I:G(0x2112)@[?:0x8] {conf=high,cs=0x1576,caller=F13} -> P(F2,0) |
|
// @PTN I:G(0x21EA)@[?:0x8] {conf=high,cs=0x1803,caller=F13} -> P(F2,0) |
|
// @PTN I:G(0x20D4)@[?:0x8] {conf=high,cs=0x14F8,caller=F12} -> P(F2,0) |
|
// @PTN E:L(F2,0)@[?:0x8] {conf=high,cs=0x10B4} -> A(F15,0) |
|
// @PTN G:G(0x4030) -> F(F2) |
|
// --- Function: .puts (0x10B0) --- |
|
// attributes: thunk |
|
int puts(const char *s) |
|
{ |
|
return puts(s); |
|
} |
|
|
|
// --- End Function: .puts (0x10B0) --- |
|
|
|
// Incoming xrefs for .strlen (0x10C0): intermediate_function (0x1353) [direct_call], another_intermediate (0x141A) [direct_call], main (0x154D) [direct_call] |
|
// Outgoing xrefs for .strlen (0x10C0): strlen (0x4038) [direct_call] |
|
// @PTN D:F3=0x10C0,.strlen |
|
// @PTN I:L(F13,28)@[0x4:0x1]& {conf=high,cs=0x173D,caller=F13} -> P(F3,0) |
|
// @PTN I:L(F10,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x139B,caller=F10} -> P(F3,0) |
|
// @PTN I:L(F11,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x1459,caller=F11} -> P(F3,0) |
|
// @PTN E:L(F3,0)@[?:0x8] {conf=high,cs=0x10C4} -> A(F16,0) |
|
// @PTN G:G(0x4038) -> F(F3) |
|
// --- Function: .strlen (0x10C0) --- |
|
// attributes: thunk |
|
size_t strlen(const char *s) |
|
{ |
|
return strlen(s); |
|
} |
|
|
|
// --- End Function: .strlen (0x10C0) --- |
|
|
|
// Incoming xrefs for .__stack_chk_fail (0x10D0): create_untrusted_data (0x11E9) [direct_call], main (0x154D) [direct_call] |
|
// Outgoing xrefs for .__stack_chk_fail (0x10D0): __stack_chk_fail (0x4040) [direct_call] |
|
// @PTN D:F4=0x10D0,.__stack_chk_fail |
|
// @PTN G:G(0x4040) -> F(F4) |
|
// --- Function: .__stack_chk_fail (0x10D0) --- |
|
// attributes: thunk |
|
void __noreturn __stack_chk_fail() |
|
{ |
|
_stack_chk_fail(); |
|
} |
|
|
|
// --- End Function: .__stack_chk_fail (0x10D0) --- |
|
|
|
// Incoming xrefs for .printf (0x10E0): leaf_function_a (0x12A4) [direct_call], leaf_function_b (0x1304) [direct_call], intermediate_function (0x1353) [direct_call], another_intermediate (0x141A) [direct_call], process_result (0x14E6) [direct_call], main (0x154D) [direct_call] |
|
// Outgoing xrefs for .printf (0x10E0): printf (0x4048) [direct_call] |
|
// @PTN D:F5=0x10E0,.printf |
|
// @PTN I:G(0x2038)@[?:0x8] {conf=high,cs=0x133C,caller=F9} -> P(F5,0) |
|
// @PTN I:G(0x2150)@[?:0x8] {conf=high,cs=0x15D4,caller=F13} -> P(F5,0) |
|
// @PTN I:G(0x2180)@[?:0x8] {conf=high,cs=0x167B,caller=F13} -> P(F5,0) |
|
// @PTN I:G(0x21B8)@[?:0x8] {conf=high,cs=0x1719,caller=F13} -> P(F5,0) |
|
// @PTN I:G(0x2068)@[?:0x8] {conf=high,cs=0x137D,caller=F10} -> P(F5,0) |
|
// @PTN I:G(0x20A0)@[?:0x8] {conf=high,cs=0x1444,caller=F11} -> P(F5,0) |
|
// @PTN I:G(0x2008)@[?:0x8] {conf=high,cs=0x12DC,caller=F8} -> P(F5,0) |
|
// @PTN I:G(0x20EA)@[?:0x8] {conf=high,cs=0x1511,caller=F12} -> P(F5,0) |
|
// @PTN I:G(0x20F5)@[?:0x8] {conf=high,cs=0x152C,caller=F12} -> P(F5,0) |
|
// @PTN I:G(0x2101)@[?:0x8] {conf=high,cs=0x1545,caller=F12} -> P(F5,0) |
|
// @PTN I:U {conf=low,cs=0x133C,caller=F9} -> P(F5,1) |
|
// @PTN I:L(F13,10)@[0x4:0x1]& {conf=high,cs=0x15D4,caller=F13} -> P(F5,1) |
|
// @PTN I:L(F13,28)@[0x4:0x1]& {conf=high,cs=0x167B,caller=F13} -> P(F5,1) |
|
// @PTN I:L(F13,33)@[0x4:0x1]& {conf=high,cs=0x1719,caller=F13} -> P(F5,1) |
|
// @PTN I:L(F10,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x137D,caller=F10} -> P(F5,1) |
|
// @PTN I:L(F11,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x1444,caller=F11} -> P(F5,1) |
|
// @PTN I:U {conf=low,cs=0x12DC,caller=F8} -> P(F5,1) |
|
// @PTN I:L(F12,6)@[?:0x8] {conf=high,cs=0x1511,caller=F12} -> P(F5,1) |
|
// @PTN I:L(F12,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x152C,caller=F12} -> P(F5,1) |
|
// @PTN I:U {conf=low,cs=0x1545,caller=F12} -> P(F5,1) |
|
// @PTN I:L(F9,0)@[0x4:0x8] {conf=high,cs=0x133C,caller=F9} -> P(F5,2) |
|
// @PTN I:L(F13,10)@[?:0x4] {conf=high,cs=0x15D4,caller=F13} -> P(F5,2) |
|
// @PTN I:L(F13,28)@[?:0x4] {conf=high,cs=0x167B,caller=F13} -> P(F5,2) |
|
// @PTN I:L(F13,33)@[?:0x4] {conf=high,cs=0x1719,caller=F13} -> P(F5,2) |
|
// @PTN I:L(F10,6)@[?:0x8] {conf=high,cs=0x137D,caller=F10} -> P(F5,2) |
|
// @PTN I:L(F11,6)@[?:0x8] {conf=high,cs=0x1444,caller=F11} -> P(F5,2) |
|
// @PTN I:L(F8,0)@[0x4:0x8] {conf=high,cs=0x12DC,caller=F8} -> P(F5,2) |
|
// @PTN I:U {conf=low,cs=0x133C,caller=F9} -> P(F5,3) |
|
// @PTN I:U {conf=low,cs=0x15D4,caller=F13} -> P(F5,3) |
|
// @PTN I:U {conf=low,cs=0x12DC,caller=F8} -> P(F5,3) |
|
// @PTN E:L(F5,0)@[?:0x8] {conf=high,cs=0x10E4} -> A(F18,0) |
|
// @PTN G:G(0x4048) -> F(F5) |
|
// --- Function: .printf (0x10E0) --- |
|
// attributes: thunk |
|
int printf(const char *format, ...) |
|
{ |
|
return printf(format); |
|
} |
|
|
|
// --- End Function: .printf (0x10E0) --- |
|
|
|
// Incoming xrefs for .strcat (0x10F0): main (0x154D) [direct_call] |
|
// Outgoing xrefs for .strcat (0x10F0): strcat (0x4050) [direct_call] |
|
// @PTN D:F6=0x10F0,.strcat |
|
// @PTN I:L(F13,28)@[0x4:0x1]& {conf=high,cs=0x1787,caller=F13} -> P(F6,0) |
|
// @PTN I:L(F13,33)@[0x4:0x1]& {conf=high,cs=0x1787,caller=F13} -> P(F6,1) |
|
// @PTN E:L(F6,0)@[?:0x8] {conf=high,cs=0x10F4} -> A(F19,0) |
|
// @PTN E:L(F6,1)@[?:0x8] {conf=high,cs=0x10F4} -> A(F19,1) |
|
// @PTN G:G(0x4050) -> F(F6) |
|
// --- Function: .strcat (0x10F0) --- |
|
// attributes: thunk |
|
char *strcat(char *dest, const char *src) |
|
{ |
|
return strcat(dest, src); |
|
} |
|
|
|
// --- End Function: .strcat (0x10F0) --- |
|
|
|
// Incoming xrefs for leaf_function_a (0x12A4): intermediate_function (0x1353) [direct_call], another_intermediate (0x141A) [direct_call] |
|
// Outgoing xrefs for leaf_function_a (0x12A4): .printf (0x10E0) [direct_call] |
|
// @PTN D:F8=0x12A4,leaf_function_a |
|
// @PTN A:L(F8,1):=L(F8,0)@[?:0x8]& {conf=med} |
|
// @PTN I:L(F10,6)@[?:0x8]& {conf=high,cs=0x1386,caller=F10} -> P(F8,0) |
|
// @PTN I:L(F11,6)@[?:0x8]& {conf=high,cs=0x144D,caller=F11} -> P(F8,0) |
|
// @PTN E:G(0x2008)@[?:0x8] {conf=high,cs=0x12DC} -> A(F5,0) |
|
// @PTN E:U {conf=low,cs=0x12DC} -> A(F5,1) |
|
// @PTN E:L(F8,0)@[0x4:0x8] {conf=high,cs=0x12DC} -> A(F5,2) |
|
// @PTN E:U {conf=low,cs=0x12DC} -> A(F5,3) |
|
// @PTN G:G(0x10E0) -> F(F8) |
|
// @PTN G:G(0x2008) -> F(F8) |
|
// --- Function: leaf_function_a (0x12A4) --- |
|
const char *__fastcall leaf_function_a(const char *p_s) |
|
{ |
|
const char *p_s_1; // rax |
|
|
|
printf("leaf_function_a: value=%d, source=%s, taint=%d\n", *(_DWORD *)p_s, p_s + 4, *((_DWORD *)p_s + 17)); |
|
*(_DWORD *)p_s += 10; |
|
p_s_1 = p_s; |
|
++*((_DWORD *)p_s + 17); |
|
return p_s_1; |
|
} |
|
|
|
// --- End Function: leaf_function_a (0x12A4) --- |
|
|
|
// Incoming xrefs for leaf_function_b (0x1304): intermediate_function (0x1353) [direct_call] |
|
// Outgoing xrefs for leaf_function_b (0x1304): .printf (0x10E0) [direct_call] |
|
// @PTN D:F9=0x1304,leaf_function_b |
|
// @PTN A:L(F9,1):=L(F9,0)@[?:0x8]& {conf=med} |
|
// @PTN I:L(F10,6)& {conf=high,cs=0x138F,caller=F10} -> P(F9,0) |
|
// @PTN E:G(0x2038)@[?:0x8] {conf=high,cs=0x133C} -> A(F5,0) |
|
// @PTN E:U {conf=low,cs=0x133C} -> A(F5,1) |
|
// @PTN E:L(F9,0)@[0x4:0x8] {conf=high,cs=0x133C} -> A(F5,2) |
|
// @PTN E:U {conf=low,cs=0x133C} -> A(F5,3) |
|
// @PTN G:G(0x10E0) -> F(F9) |
|
// @PTN G:G(0x2038) -> F(F9) |
|
// --- Function: leaf_function_b (0x1304) --- |
|
const char *__fastcall leaf_function_b(const char *p_s) |
|
{ |
|
const char *p_s_1; // rax |
|
|
|
printf("leaf_function_b: value=%d, source=%s, taint=%d\n", *(_DWORD *)p_s, p_s + 4, *((_DWORD *)p_s + 17)); |
|
p_s_1 = p_s; |
|
*(_DWORD *)p_s *= 2; |
|
return p_s_1; |
|
} |
|
|
|
// --- End Function: leaf_function_b (0x1304) --- |
|
|
|
// Incoming xrefs for create_untrusted_data (0x11E9): main (0x154D) [direct_call] |
|
// Outgoing xrefs for create_untrusted_data (0x11E9): .strncpy (0x10A0) [direct_call], .__stack_chk_fail (0x10D0) [direct_call] |
|
// @PTN D:F7=0x11E9,create_untrusted_data |
|
// @PTN A:L(F7,2):=L(F7,7)@[0x8:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,7)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,2)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F7,3):=L(F7,7)@[0x18:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,7)@[0x10:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,3)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F7,4):=L(F7,7)@[0x28:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,7)@[0x20:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,4)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F7,5):=L(F7,7)@[0x38:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,7)@[0x30:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,5)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F7,-1):=L(F7,8)@[?:0x8]& {conf=med} |
|
// @PTN I:L(F13,10)@[?:0x8] {conf=high,cs=0x158F,caller=F13} -> P(F7,0) |
|
// @PTN I:L(F13,19)@[?:0x8] {conf=high,cs=0x15A8,caller=F13} -> P(F7,0) |
|
// @PTN I:G(0x2129)@[?:0x8] {conf=high,cs=0x158F,caller=F13} -> P(F7,1) |
|
// @PTN I:G(0x213A)@[?:0x8] {conf=high,cs=0x15A8,caller=F13} -> P(F7,1) |
|
// @PTN E:L(F7,7)@[0x4:0x8]:(char *) {conf=high,cs=0x1232} -> A(F1,0) |
|
// @PTN E:L(F7,1)@[?:0x8] {conf=high,cs=0x1232} -> A(F1,1) |
|
// @PTN E:U {conf=low,cs=0x1232} -> A(F1,2) |
|
// @PTN G:G(0x10A0) -> F(F7) |
|
// --- Function: create_untrusted_data (0x11E9) --- |
|
int *__fastcall create_untrusted_data(int *p_s, char *p_external_input) |
|
{ |
|
__int64 v2; // rbx |
|
__int64 v3; // rbx |
|
__int64 v4; // rbx |
|
__int64 v5; // rbx |
|
_QWORD v7[8]; // [rsp+10h] [rbp-60h] BYREF |
|
__int64 v8; // [rsp+50h] [rbp-20h] |
|
unsigned __int64 v9; // [rsp+58h] [rbp-18h] |
|
|
|
v9 = __readfsqword(0x28u); |
|
LODWORD(v7[0]) = 42; |
|
HIDWORD(v8) = 1; |
|
strncpy((char *)v7 + 4, p_external_input, 0x3Fu); |
|
BYTE3(v8) = 0; |
|
v2 = v7[1]; |
|
*(_QWORD *)p_s = v7[0]; |
|
*((_QWORD *)p_s + 1) = v2; |
|
v3 = v7[3]; |
|
*((_QWORD *)p_s + 2) = v7[2]; |
|
*((_QWORD *)p_s + 3) = v3; |
|
v4 = v7[5]; |
|
*((_QWORD *)p_s + 4) = v7[4]; |
|
*((_QWORD *)p_s + 5) = v4; |
|
v5 = v7[7]; |
|
*((_QWORD *)p_s + 6) = v7[6]; |
|
*((_QWORD *)p_s + 7) = v5; |
|
*((_QWORD *)p_s + 8) = v8; |
|
return p_s; |
|
} |
|
|
|
// --- End Function: create_untrusted_data (0x11E9) --- |
|
|
|
// Incoming xrefs for process_result (0x14E6): main (0x154D) [direct_call] |
|
// Outgoing xrefs for process_result (0x14E6): .puts (0x10B0) [direct_call], .printf (0x10E0) [direct_call] |
|
// @PTN D:F12=0x14E6,process_result |
|
// @PTN I:L(F13,28)@[0x4:0x4]& {conf=high,cs=0x17F0,caller=F13} -> P(F12,0) |
|
// @PTN I:L(F13,33)@[0x4:0x4]& {conf=high,cs=0x17F0,caller=F13} -> P(F12,1) |
|
// @PTN I:L(F13,32)@[?:0x8] {conf=high,cs=0x17F0,caller=F13} -> P(F12,2) |
|
// @PTN I:L(F13,31)@[?:0x8] {conf=high,cs=0x17F0,caller=F13} -> P(F12,3) |
|
// @PTN I:L(F13,7)@[?:0x8] {conf=high,cs=0x17F0,caller=F13} -> P(F12,4) |
|
// @PTN I:L(F13,8)@[?:0x8] {conf=high,cs=0x17F0,caller=F13} -> P(F12,5) |
|
// @PTN I:U {conf=low,cs=0x17F0,caller=F13} -> P(F12,6) |
|
// @PTN I:L(F13,29)@[?:0x8] {conf=high,cs=0x17F0,caller=F13} -> P(F12,7) |
|
// @PTN I:L(F13,30)@[?:0x8] {conf=high,cs=0x17F0,caller=F13} -> P(F12,8) |
|
// @PTN E:G(0x20D4)@[?:0x8] {conf=high,cs=0x14F8} -> A(F2,0) |
|
// @PTN E:G(0x20EA)@[?:0x8] {conf=high,cs=0x1511} -> A(F5,0) |
|
// @PTN E:L(F12,6)@[?:0x8] {conf=high,cs=0x1511} -> A(F5,1) |
|
// @PTN E:G(0x20F5)@[?:0x8] {conf=high,cs=0x152C} -> A(F5,0) |
|
// @PTN E:L(F12,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x152C} -> A(F5,1) |
|
// @PTN E:G(0x2101)@[?:0x8] {conf=high,cs=0x1545} -> A(F5,0) |
|
// @PTN E:U {conf=low,cs=0x1545} -> A(F5,1) |
|
// @PTN G:G(0x10B0) -> F(F12) |
|
// @PTN G:G(0x20D4) -> F(F12) |
|
// @PTN G:G(0x10E0) -> F(F12) |
|
// @PTN G:G(0x20EA) -> F(F12) |
|
// @PTN G:G(0x10E0) -> F(F12) |
|
// @PTN G:G(0x20F5) -> F(F12) |
|
// @PTN G:G(0x10E0) -> F(F12) |
|
// @PTN G:G(0x2101) -> F(F12) |
|
// --- Function: process_result (0x14E6) --- |
|
int __fastcall process_result( |
|
__int64 a1, |
|
__int64 a2, |
|
__int64 a3, |
|
__int64 a4, |
|
__int64 a5, |
|
__int64 a6, |
|
__int64 a7, |
|
__int64 a8, |
|
__int64 a9, |
|
__int64 a10, |
|
__int64 a11, |
|
__int64 a12, |
|
__int64 a13, |
|
__int64 a14, |
|
__int64 a15) |
|
{ |
|
puts("\n=== Final Result ==="); |
|
printf("Value: %d\n", a7); |
|
printf("Source: %s\n", (const char *)&a7 + 4); |
|
return printf("Taint Level: %d\n", HIDWORD(a15)); |
|
} |
|
|
|
// --- End Function: process_result (0x14E6) --- |
|
|
|
// Incoming xrefs for another_intermediate (0x141A): main (0x154D) [direct_call] |
|
// Outgoing xrefs for another_intermediate (0x141A): .strlen (0x10C0) [direct_call], .printf (0x10E0) [direct_call], leaf_function_a (0x12A4) [direct_call] |
|
// @PTN D:F11=0x141A,another_intermediate |
|
// @PTN A:L(F11,15):=L(F11,7)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,6)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,15)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F11,16):=L(F11,9)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,8)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,16)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F11,17):=L(F11,11)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,10)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,17)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F11,18):=L(F11,13)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,12)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,18)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F11,-1):=L(F11,14)@[?:0x8]& {conf=med} |
|
// @PTN I:L(F13,33)@[?:0x8] {conf=high,cs=0x16F4,caller=F13} -> P(F11,0) |
|
// @PTN I:L(F13,28)@[0x4:?]& {conf=high,cs=0x16F4,caller=F13} -> P(F11,1) |
|
// @PTN I:L(F13,33)@[?:0x4] {conf=high,cs=0x16F4,caller=F13} -> P(F11,2) |
|
// @PTN I:L(F13,27)@[?:0x4] {conf=high,cs=0x16F4,caller=F13} -> P(F11,3) |
|
// @PTN I:L(F13,5)@[?:0x4] {conf=high,cs=0x16F4,caller=F13} -> P(F11,4) |
|
// @PTN I:L(F13,6)@[?:0x4] {conf=high,cs=0x16F4,caller=F13} -> P(F11,5) |
|
// @PTN I:U {conf=low,cs=0x16F4,caller=F13} -> P(F11,6) |
|
// @PTN I:L(F13,20)@[?:0x8] {conf=high,cs=0x16F4,caller=F13} -> P(F11,7) |
|
// @PTN I:L(F13,21)@[?:0x8] {conf=high,cs=0x16F4,caller=F13} -> P(F11,8) |
|
// @PTN I:L(F13,22)@[?:0x8] {conf=high,cs=0x16F4,caller=F13} -> P(F11,9) |
|
// @PTN I:L(F13,23)@[?:0x8] {conf=high,cs=0x16F4,caller=F13} -> P(F11,10) |
|
// @PTN I:L(F13,24)@[?:0x8] {conf=high,cs=0x16F4,caller=F13} -> P(F11,11) |
|
// @PTN I:L(F13,25)@[?:0x8] {conf=high,cs=0x16F4,caller=F13} -> P(F11,12) |
|
// @PTN I:L(F13,26)@[?:0x8] {conf=high,cs=0x16F4,caller=F13} -> P(F11,13) |
|
// @PTN I:U {conf=low,cs=0x16F4,caller=F13} -> P(F11,14) |
|
// @PTN E:G(0x20A0)@[?:0x8] {conf=high,cs=0x1444} -> A(F5,0) |
|
// @PTN E:L(F11,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x1444} -> A(F5,1) |
|
// @PTN E:L(F11,6)@[?:0x8] {conf=high,cs=0x1444} -> A(F5,2) |
|
// @PTN E:L(F11,6)@[?:0x8]& {conf=high,cs=0x144D} -> A(F8,0) |
|
// @PTN E:L(F11,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x1459} -> A(F3,0) |
|
// @PTN G:G(0x10E0) -> F(F11) |
|
// @PTN G:G(0x20A0) -> F(F11) |
|
// @PTN G:G(0x12A4) -> F(F11) |
|
// @PTN G:G(0x10C0) -> F(F11) |
|
// @PTN G:G(0x10C0) -> F(F11) |
|
// @PTN G:G(0x10C0) -> F(F11) |
|
// --- Function: another_intermediate (0x141A) --- |
|
__int64 *__fastcall another_intermediate( |
|
__int64 *a1, |
|
int a2, |
|
int a3, |
|
int a4, |
|
int a5, |
|
int a6, |
|
__int64 s, |
|
__int64 a8, |
|
__int64 a9, |
|
__int64 a10, |
|
__int64 a11, |
|
__int64 a12, |
|
__int64 a13, |
|
__int64 a14, |
|
__int64 a15) |
|
{ |
|
__int64 v15; // rbx |
|
__int64 v16; // rbx |
|
__int64 v17; // rbx |
|
__int64 v18; // rbx |
|
|
|
printf("another_intermediate received: source=%s, value=%d\n", (const char *)&s + 4, s); |
|
leaf_function_a(&s); |
|
strcpy((char *)&s + strlen((const char *)&s + 4) + 4, "->another_intermediate"); |
|
v15 = a8; |
|
*a1 = s; |
|
a1[1] = v15; |
|
v16 = a10; |
|
a1[2] = a9; |
|
a1[3] = v16; |
|
v17 = a12; |
|
a1[4] = a11; |
|
a1[5] = v17; |
|
v18 = a14; |
|
a1[6] = a13; |
|
a1[7] = v18; |
|
a1[8] = a15; |
|
return a1; |
|
} |
|
|
|
// --- End Function: another_intermediate (0x141A) --- |
|
|
|
// Incoming xrefs for intermediate_function (0x1353): main (0x154D) [direct_call] |
|
// Outgoing xrefs for intermediate_function (0x1353): .strlen (0x10C0) [direct_call], .printf (0x10E0) [direct_call], leaf_function_a (0x12A4) [direct_call], leaf_function_b (0x1304) [direct_call] |
|
// @PTN D:F10=0x1353,intermediate_function |
|
// @PTN A:L(F10,15):=L(F10,7)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,6)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,15)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F10,16):=L(F10,9)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,8)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,16)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F10,17):=L(F10,11)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,10)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,17)@[?:0x8]& {conf=med} |
|
// @PTN A:L(F10,18):=L(F10,13)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,12)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,18)@[?:0x8]& {conf=med} |
|
// @PTN A:U(F10,-1):=L(F10,14)@[?:0x8]& {conf=med} |
|
// @PTN I:L(F13,28)@[?:0x4] {conf=high,cs=0x1650,caller=F13} -> P(F10,0) |
|
// @PTN I:L(F13,10)@[0x4:?]& {conf=high,cs=0x1650,caller=F13} -> P(F10,1) |
|
// @PTN I:L(F13,28)@[?:0x4] {conf=high,cs=0x1650,caller=F13} -> P(F10,2) |
|
// @PTN I:L(F13,18)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,3) |
|
// @PTN I:L(F13,3)@[?:0x4] {conf=high,cs=0x1650,caller=F13} -> P(F10,4) |
|
// @PTN I:L(F13,4)@[?:0x4] {conf=high,cs=0x1650,caller=F13} -> P(F10,5) |
|
// @PTN I:L(F13,10)@[?:0x4] {conf=high,cs=0x1650,caller=F13} -> P(F10,6) |
|
// @PTN I:L(F13,11)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,7) |
|
// @PTN I:L(F13,12)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,8) |
|
// @PTN I:L(F13,13)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,9) |
|
// @PTN I:L(F13,14)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,10) |
|
// @PTN I:L(F13,15)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,11) |
|
// @PTN I:L(F13,16)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,12) |
|
// @PTN I:L(F13,17)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,13) |
|
// @PTN I:L(F13,18)@[?:0x8] {conf=high,cs=0x1650,caller=F13} -> P(F10,14) |
|
// @PTN E:G(0x2068)@[?:0x8] {conf=high,cs=0x137D} -> A(F5,0) |
|
// @PTN E:L(F10,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x137D} -> A(F5,1) |
|
// @PTN E:L(F10,6)@[?:0x8] {conf=high,cs=0x137D} -> A(F5,2) |
|
// @PTN E:L(F10,6)@[?:0x8]& {conf=high,cs=0x1386} -> A(F8,0) |
|
// @PTN E:L(F10,6)& {conf=high,cs=0x138F} -> A(F9,0) |
|
// @PTN E:L(F10,6)@[0x4:0x1]&:(const char *) {conf=high,cs=0x139B} -> A(F3,0) |
|
// @PTN G:G(0x10E0) -> F(F10) |
|
// @PTN G:G(0x2068) -> F(F10) |
|
// @PTN G:G(0x12A4) -> F(F10) |
|
// @PTN G:G(0x1304) -> F(F10) |
|
// @PTN G:G(0x10C0) -> F(F10) |
|
// @PTN G:G(0x10C0) -> F(F10) |
|
// @PTN G:G(0x10C0) -> F(F10) |
|
// --- Function: intermediate_function (0x1353) --- |
|
_QWORD *__fastcall intermediate_function( |
|
_QWORD *a1, |
|
int a2, |
|
int a3, |
|
int a4, |
|
int a5, |
|
int a6, |
|
__int64 s, |
|
__int64 a8, |
|
__int64 a9, |
|
__int64 a10, |
|
__int64 a11, |
|
__int64 a12, |
|
__int64 a13, |
|
__int64 a14, |
|
__int64 a15) |
|
{ |
|
__int64 v15; // rbx |
|
__int64 v16; // rbx |
|
__int64 v17; // rbx |
|
__int64 v18; // rbx |
|
|
|
printf("intermediate_function received: source=%s, value=%d\n", (const char *)&s + 4, s); |
|
leaf_function_a(&s); |
|
leaf_function_b((__int64)&s); |
|
strcpy((char *)&s + strlen((const char *)&s + 4) + 4, "->intermediate"); |
|
v15 = a8; |
|
*a1 = s; |
|
a1[1] = v15; |
|
v16 = a10; |
|
a1[2] = a9; |
|
a1[3] = v16; |
|
v17 = a12; |
|
a1[4] = a11; |
|
a1[5] = v17; |
|
v18 = a14; |
|
a1[6] = a13; |
|
a1[7] = v18; |
|
a1[8] = a15; |
|
return a1; |
|
} |
|
|
|
// --- End Function: intermediate_function (0x1353) --- |
|
|
|
// Incoming xrefs for main (0x154D): None |
|
// Outgoing xrefs for main (0x154D): .puts (0x10B0) [direct_call], .strlen (0x10C0) [direct_call], .__stack_chk_fail (0x10D0) [direct_call], .printf (0x10E0) [direct_call], .strcat (0x10F0) [direct_call], create_untrusted_data (0x11E9) [direct_call], intermediate_function (0x1353) [direct_call], another_intermediate (0x141A) [direct_call], process_result (0x14E6) [direct_call] |
|
// @PTN D:F13=0x154D,main |
|
// @PTN E:G(0x2112)@[?:0x8] {conf=high,cs=0x1576} -> A(F2,0) |
|
// @PTN E:L(F13,10)@[?:0x8] {conf=high,cs=0x158F} -> A(F7,0) |
|
// @PTN E:G(0x2129)@[?:0x8] {conf=high,cs=0x158F} -> A(F7,1) |
|
// @PTN E:L(F13,19)@[?:0x8] {conf=high,cs=0x15A8} -> A(F7,0) |
|
// @PTN E:G(0x213A)@[?:0x8] {conf=high,cs=0x15A8} -> A(F7,1) |
|
// @PTN E:G(0x2150)@[?:0x8] {conf=high,cs=0x15D4} -> A(F5,0) |
|
// @PTN E:L(F13,10)@[0x4:0x1]& {conf=high,cs=0x15D4} -> A(F5,1) |
|
// @PTN E:L(F13,10)@[?:0x4] {conf=high,cs=0x15D4} -> A(F5,2) |
|
// @PTN E:U {conf=low,cs=0x15D4} -> A(F5,3) |
|
// @PTN E:L(F13,28)@[?:0x4] {conf=high,cs=0x1650} -> A(F10,0) |
|
// @PTN E:L(F13,10)@[0x4:?]& {conf=high,cs=0x1650} -> A(F10,1) |
|
// @PTN E:L(F13,28)@[?:0x4] {conf=high,cs=0x1650} -> A(F10,2) |
|
// @PTN E:L(F13,18)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,3) |
|
// @PTN E:L(F13,3)@[?:0x4] {conf=high,cs=0x1650} -> A(F10,4) |
|
// @PTN E:L(F13,4)@[?:0x4] {conf=high,cs=0x1650} -> A(F10,5) |
|
// @PTN E:L(F13,10)@[?:0x4] {conf=high,cs=0x1650} -> A(F10,6) |
|
// @PTN E:L(F13,11)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,7) |
|
// @PTN E:L(F13,12)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,8) |
|
// @PTN E:L(F13,13)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,9) |
|
// @PTN E:L(F13,14)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,10) |
|
// @PTN E:L(F13,15)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,11) |
|
// @PTN E:L(F13,16)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,12) |
|
// @PTN E:L(F13,17)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,13) |
|
// @PTN E:L(F13,18)@[?:0x8] {conf=high,cs=0x1650} -> A(F10,14) |
|
// @PTN E:G(0x2180)@[?:0x8] {conf=high,cs=0x167B} -> A(F5,0) |
|
// @PTN E:L(F13,28)@[0x4:0x1]& {conf=high,cs=0x167B} -> A(F5,1) |
|
// @PTN E:L(F13,28)@[?:0x4] {conf=high,cs=0x167B} -> A(F5,2) |
|
// @PTN E:L(F13,33)@[?:0x8] {conf=high,cs=0x16F4} -> A(F11,0) |
|
// @PTN E:L(F13,28)@[0x4:?]& {conf=high,cs=0x16F4} -> A(F11,1) |
|
// @PTN E:L(F13,33)@[?:0x4] {conf=high,cs=0x16F4} -> A(F11,2) |
|
// @PTN E:L(F13,27)@[?:0x4] {conf=high,cs=0x16F4} -> A(F11,3) |
|
// @PTN E:L(F13,5)@[?:0x4] {conf=high,cs=0x16F4} -> A(F11,4) |
|
// @PTN E:L(F13,6)@[?:0x4] {conf=high,cs=0x16F4} -> A(F11,5) |
|
// @PTN E:U {conf=low,cs=0x16F4} -> A(F11,6) |
|
// @PTN E:L(F13,20)@[?:0x8] {conf=high,cs=0x16F4} -> A(F11,7) |
|
// @PTN E:L(F13,21)@[?:0x8] {conf=high,cs=0x16F4} -> A(F11,8) |
|
// @PTN E:L(F13,22)@[?:0x8] {conf=high,cs=0x16F4} -> A(F11,9) |
|
// @PTN E:L(F13,23)@[?:0x8] {conf=high,cs=0x16F4} -> A(F11,10) |
|
// @PTN E:L(F13,24)@[?:0x8] {conf=high,cs=0x16F4} -> A(F11,11) |
|
// @PTN E:L(F13,25)@[?:0x8] {conf=high,cs=0x16F4} -> A(F11,12) |
|
// @PTN E:L(F13,26)@[?:0x8] {conf=high,cs=0x16F4} -> A(F11,13) |
|
// @PTN E:U {conf=low,cs=0x16F4} -> A(F11,14) |
|
// @PTN E:G(0x21B8)@[?:0x8] {conf=high,cs=0x1719} -> A(F5,0) |
|
// @PTN E:L(F13,33)@[0x4:0x1]& {conf=high,cs=0x1719} -> A(F5,1) |
|
// @PTN E:L(F13,33)@[?:0x4] {conf=high,cs=0x1719} -> A(F5,2) |
|
// @PTN E:L(F13,28)@[0x4:0x1]& {conf=high,cs=0x173D} -> A(F3,0) |
|
// @PTN E:L(F13,28)@[0x4:0x1]& {conf=high,cs=0x1787} -> A(F6,0) |
|
// @PTN E:L(F13,33)@[0x4:0x1]& {conf=high,cs=0x1787} -> A(F6,1) |
|
// @PTN E:L(F13,28)@[0x4:0x4]& {conf=high,cs=0x17F0} -> A(F12,0) |
|
// @PTN E:L(F13,33)@[0x4:0x4]& {conf=high,cs=0x17F0} -> A(F12,1) |
|
// @PTN E:L(F13,32)@[?:0x8] {conf=high,cs=0x17F0} -> A(F12,2) |
|
// @PTN E:L(F13,31)@[?:0x8] {conf=high,cs=0x17F0} -> A(F12,3) |
|
// @PTN E:L(F13,7)@[?:0x8] {conf=high,cs=0x17F0} -> A(F12,4) |
|
// @PTN E:L(F13,8)@[?:0x8] {conf=high,cs=0x17F0} -> A(F12,5) |
|
// @PTN E:U {conf=low,cs=0x17F0} -> A(F12,6) |
|
// @PTN E:L(F13,29)@[?:0x8] {conf=high,cs=0x17F0} -> A(F12,7) |
|
// @PTN E:L(F13,30)@[?:0x8] {conf=high,cs=0x17F0} -> A(F12,8) |
|
// @PTN E:G(0x21EA)@[?:0x8] {conf=high,cs=0x1803} -> A(F2,0) |
|
// @PTN G:G(0x10B0) -> F(F13) |
|
// @PTN G:G(0x2112) -> F(F13) |
|
// @PTN G:G(0x11E9) -> F(F13) |
|
// @PTN G:G(0x2129) -> F(F13) |
|
// @PTN G:G(0x2129) -> F(F13) |
|
// @PTN G:G(0x11E9) -> F(F13) |
|
// @PTN G:G(0x213A) -> F(F13) |
|
// @PTN G:G(0x213A) -> F(F13) |
|
// @PTN G:G(0x10E0) -> F(F13) |
|
// @PTN G:G(0x2150) -> F(F13) |
|
// @PTN G:G(0x1353) -> F(F13) |
|
// @PTN G:G(0x10E0) -> F(F13) |
|
// @PTN G:G(0x2180) -> F(F13) |
|
// @PTN G:G(0x141A) -> F(F13) |
|
// @PTN G:G(0x10E0) -> F(F13) |
|
// @PTN G:G(0x21B8) -> F(F13) |
|
// @PTN G:G(0x10C0) -> F(F13) |
|
// @PTN G:G(0x10C0) -> F(F13) |
|
// @PTN G:G(0x10F0) -> F(F13) |
|
// @PTN G:G(0x14E6) -> F(F13) |
|
// @PTN G:G(0x10B0) -> F(F13) |
|
// @PTN G:G(0x21EA) -> F(F13) |
|
// --- Function: main (0x154D) --- |
|
int __fastcall main(int argc, const char **argv, const char **envp) |
|
{ |
|
int v3; // r8d |
|
int v4; // r9d |
|
int v5; // r8d |
|
int v6; // r9d |
|
__int64 v7; // r8 |
|
__int64 v8; // r9 |
|
int p_s[2]; // [rsp+0h] [rbp-150h] BYREF |
|
__int64 v11; // [rsp+8h] [rbp-148h] |
|
__int64 v12; // [rsp+10h] [rbp-140h] |
|
__int64 v13; // [rsp+18h] [rbp-138h] |
|
__int64 v14; // [rsp+20h] [rbp-130h] |
|
__int64 v15; // [rsp+28h] [rbp-128h] |
|
__int64 v16; // [rsp+30h] [rbp-120h] |
|
__int64 v17; // [rsp+38h] [rbp-118h] |
|
__int64 v18; // [rsp+40h] [rbp-110h] |
|
int s_1[2]; // [rsp+50h] [rbp-100h] BYREF |
|
__int64 v20; // [rsp+58h] [rbp-F8h] |
|
__int64 v21; // [rsp+60h] [rbp-F0h] |
|
__int64 v22; // [rsp+68h] [rbp-E8h] |
|
__int64 v23; // [rsp+70h] [rbp-E0h] |
|
__int64 v24; // [rsp+78h] [rbp-D8h] |
|
__int64 v25; // [rsp+80h] [rbp-D0h] |
|
__int64 v26; // [rsp+88h] [rbp-C8h] |
|
int v27[2]; // [rsp+90h] [rbp-C0h] |
|
int v28[2]; // [rsp+A0h] [rbp-B0h] BYREF |
|
__int64 v29; // [rsp+A8h] [rbp-A8h] |
|
__int64 v30; // [rsp+B0h] [rbp-A0h] |
|
__int64 v31; // [rsp+D0h] [rbp-80h] |
|
__int64 v32; // [rsp+E0h] [rbp-70h] |
|
int v33[18]; // [rsp+F0h] [rbp-60h] BYREF |
|
unsigned __int64 v34; // [rsp+138h] [rbp-18h] |
|
|
|
v34 = __readfsqword(0x28u); |
|
puts("=== Program Start ===\n"); |
|
create_untrusted_data(p_s, "external_input_1"); |
|
create_untrusted_data(s_1, "external_input_2"); |
|
printf("Initial data1: source=%s, value=%d, taint=%d\n\n", (const char *)&p_s[1], p_s[0], HIDWORD(v18)); |
|
intermediate_function((int)v28, (int)&p_s[1], (int)v28, v18, v3, v4, p_s[0], v11, v12, v13, v14, v15, v16, v17, v18); |
|
printf("After intermediate_function: source=%s, value=%d\n\n", (const char *)&v28[1], v28[0]); |
|
another_intermediate( |
|
(__int64 *)v33, |
|
(int)&v28[1], |
|
(int)v33, |
|
v27[0], |
|
v5, |
|
v6, |
|
*(__int64 *)s_1, |
|
v20, |
|
v21, |
|
v22, |
|
v23, |
|
v24, |
|
v25, |
|
v26, |
|
*(__int64 *)v27); |
|
printf("After another_intermediate: source=%s, value=%d\n\n", (const char *)&v33[1], v33[0]); |
|
v28[0] += v33[0]; |
|
strcpy((char *)&v28[1] + strlen((const char *)&v28[1]), "<-merged_from_"); |
|
strcat((char *)&v28[1], (const char *)&v33[1]); |
|
process_result(&v28[1], &v33[1], v32, v31, v7, v8, *(_QWORD *)v28, v29, v30); |
|
puts("\n=== Program End ==="); |
|
return 0; |
|
} |
|
|
|
// --- End Function: main (0x154D) --- |
|
|