MSxDOS / ntapi

Rust FFI bindings for Native API
Apache License 2.0
95 stars 31 forks source link

reference to packed field is unaligned #19

Open CheetoTrump opened 1 year ago

CheetoTrump commented 1 year ago

Ive tried ntapi = "0.4.1" ntapi = "0.4.0" ntapi = "0.3.7"

and 32bit and 64bit for each version

I get these errors when compiling the crate

error[E0793]: reference to packed field is unaligned --> C:\Users\USER.cargo\registry\src\index.crates.io-6f17d22bba15001f\ntapi-0.3.7\src\ntexapi.rs:2783:52 2783 tick_count.QuadPart_mut() = read_volatile(&(USER_SHARED_DATA).u.TickCountQuad); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 = note: packed structs are only aligned by one byte, and many modern architectures penalize unaligned field accesses
 = note: creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
 = help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers)
error[E0793]: reference to packed field is unaligned --> C:\Users\USER.cargo\registry\src\index.crates.io-6f17d22bba15001f\ntapi-0.3.7\src\ntexapi.rs:2807:25 2807 ((read_volatile(&(USER_SHARED_DATA).u.TickCountQuad).wrapping_mul((USER_SHARED_DATA).TickCountMultiplier as u64)) >> 24) as u32 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 = note: packed structs are only aligned by one byte, and many modern architectures penalize unaligned field accesses
 = note: creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
 = help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers)

For more information about this error, try rustc --explain E0793. error: could not compile ntapi (lib) due to 2 previous errors

eminence commented 1 year ago

This was fixed in the 0.4 release. From the paths in the logs above, you're still using ntapi-0.3.7

acf-patrick commented 1 year ago

I don't quite get it, why is Cargo/the compiler still using version 0.3.7 of the lib even if one has set explicitly ntapi = "0.4" in Cargo.toml

eminence commented 1 year ago

You probably have some other dependency that is requiring 0.3.7 (so both 0.3.7 and 0.4.x are brought into your crate graph).

Try running cargo tree -i ntapi to see all the packages that depend on ntapi

CheetoTrump commented 1 year ago

i should have sent all 3 errors but i didnt, they were 1:1 but different versions of ntapi

Gordon01 commented 1 year ago

cargo update may help in such cases