我有一些反編譯的C源代碼,看到這個奇怪的字符串賦值。C字符串賦值向後
char v1[21];
v1[0] = 0x75767778;
"tsrqponmlkjihgfedcba" = v1;
這是怎麼回事?這怎麼可能?
我有一些反編譯的C源代碼,看到這個奇怪的字符串賦值。C字符串賦值向後
char v1[21];
v1[0] = 0x75767778;
"tsrqponmlkjihgfedcba" = v1;
這是怎麼回事?這怎麼可能?
char v1[21];
到目前爲止沒有問題;將v1
定義爲包含21個char
元素的數組。
v1[0] = 0x75767778;
法律,但不正確。 v1[0]
是一個char
對象。除非CHAR_BIT >= 32
(不太可能),否則它不能保存值0x75767778
。如果普通的char
是無符號的並且CHAR_BIT==8
,它將分配值0x78
;如果純char
已簽名,它將可能做相同,但值是實現定義的。
這可能是相關的是,的0x75767778
字節是字符'u'
,'v'
,'w'
和'x'
的ASCII碼。
"tsrqponmlkjihgfedcba" = v1;
這是非法的。字符串文字不能是賦值的左側,C不支持數組賦值。
顯然你的「反編譯器」(你沒有發現)正在產生或多或少看起來像C的東西,但不是。
這可能是部分解釋如果左側和右側的任務被顛倒。即使是這樣,輸出似乎是某種僞代碼。 (難道代碼實際使用=
而不是說,->
或=>
?)
看到從這個被「反編譯」源代碼將是有益的 - 因爲會知道什麼是「反編譯」您正在使用和看到的其文檔。
我猜測是源代碼有一個字符串象"xwvutsrqponmlkjihgfedcba"
,和產生的代碼中使用的整數分配給複製"xwvu"
(表示爲0x75767778
)和一個單獨的操作對於剩餘的20個字符,但是這只是一個猜測。或者它可能是"abcdefghijklmnopqrstuvwx"
,並且由於字節排序而被顛倒過來。
它編譯? –
這不應該編譯。作業的左側應該始終是一個變量。這可能是反編譯的問題。 –
我從https://retdec.com/decompilation/ – user3376293