gpt4 book ai didi

c - 如何确定此函数将返回 true 的输入?

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:06 25 4
gpt4 key购买 nike

一位热衷于编码的 friend 为我提供了这个小小的思考练习。

在处理 str == check_string 之后应该传递什么字符串?

这对我来说似乎很有趣,但我看不出如何推断要使用的字符串。

bool func(char str[3])
{
char check_string[3] = {0x63, 0x69, 0x71};
int i = 0;
int j = 42;

for (i = 0; i < 3; i++, j += 3) {
str[i] ^= j;
}

return strncmp(str, check_string, 3);
}

如何处理这个问题?这是一个技巧问题吗?

最佳答案

在记事本中试运行告诉我,当您到达 strncmp 调用时,str 的状态将是:

str[0] = str[0] ^ 42
str[1] = str[1] ^ 45
str[2] = str[2] ^ 48

假设比较的是 0x63, 0x69, 0x71 那么 str[0] ^ 42 等于 0x63 ( 99) 然后找到 X 这样:

X ^ 42 == 99

请注意,XOR 是一个有趣的运算,因为您只需重新应用它即可将其取反(而加法通过减法取反,除法通过乘法取反):

99 ^ 42 == 73

所以输入的str[0]一定是73。

重复str[1]str[2]的过程是这样的:

str[0] = (  99 ^ 42 ) = 73 = 'I'
str[1] = ( 105 ^ 45 ) = 68 = 'D'
str[2] = ( 113 ^ 48 ) = 65 = 'A'

因此输入字符串“IDA”将被处理为两个字符串相等。

我不知道IDA有什么意义,问问你的 friend ——可能是对强大的IDA反汇编工具的引用。

关于c - 如何确定此函数将返回 true 的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34845331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com