Vector35 / Vector35/binaryninja-api
Invalid operand size lifted as MLIL_CALL argument.
@D0ntPanic is already working on this.
Since Feb 9, 2026.
- Dominant language
- C++
- Stars
- 1.3k
- Forks
- 298
- Avg merge
- 5d 5h
- Merged PRs (30d)
- 19
Description
Version and Platform (required):
- Binary Ninja Version: 4.1.5061-dev (587afcf1)
- OS: Windows 11
- CPU Architecture: x64
Looking at MLIL_CALL specifically, with the following prototype: uint32_t DbgPrintEx(uint32_t ComponentId, uint32_t Level, char* Format, ...). Looking at the disassembly we have the following listing:
1400857a3 mov r15, qword [rdi+0x10 {_ARW_HELPER_OBJECT_IO::Length}]
1400857a7 mov r9, r15
1400857aa lea r8, [rel `string'::[+] Name Length: 0x%X\n] {"[+] Name Length: 0x%X\n"}
1400857b1 lea r13d, [rbx+0x3]
1400857b5 mov edx, r13d {0x3}
1400857b8 lea r12d, [rbx+0x4d]
1400857bc mov ecx, r12d {0x4d}
1400857bf call qword [rel DbgPrintEx]
The call is lifted as follow:
4 @ 1400857bf DbgPrintEx(ComponentId: 0x4d, Level: 3, Format: "[+] Name Length: 0x%X\n", r9)
But all constant argument expressions are of size 8 instead of 4:
>>> current_function.mlil[4].params[0].size
8
>>> current_function.mlil[4].params[1].size
8
The value size should be 4. Looking at the LLIL:
14 @ 1400857a3 r15 = [rdi + 0x10 {_ARW_HELPER_OBJECT_IO::Length}].q
15 @ 1400857a7 r9 = r15
16 @ 1400857aa r8 = &`string'::[+] Name Length: 0x%X\n {"[+] Name Length: 0x%X\n"}
17 @ 1400857b1 r13d = (rbx + 3).d
18 @ 1400857b5 edx = r13d
19 @ 1400857b8 r12d = (rbx + 0x4d).d
20 @ 1400857bc ecx = r12d
21 @ 1400857bf call([DbgPrintEx].q)
// ...
>>> current_function.llil[21]
<LowLevelILCall: call([0x140002008].q)>
>>> current_function.llil[20].size
4
>>> current_function.llil[20]
<LowLevelILSetReg: ecx = r12d>
I seem to observe this behavior for MLIL_CALL only. The binary used is the HEVD 3.00. Assembly listing comes from CreateArbitraryReadWriteHelperObjectNonPagedPoolNx.
HEVD3.00.zip
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.