zasm | x86-64 Assembler based on Zydis
kandi X-RAY | zasm Summary
kandi X-RAY | zasm Summary
Zasm provides a very flexible and lightweight library to manipulate and generate x86-64 code using Zydis as the backend. Zasm stores everything as nodes such as instructions, data, labels, sections, etc. which provides a way to easily manipulate/transform the code before serializing it into binary. The API is inspired by AsmJit so if you have used AsmJit before this should feel very familiar.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of zasm
zasm Key Features
zasm Examples and Code Snippets
Community Discussions
Trending Discussions on Hardware
QUESTION
I only know C programming. Using C programming, I want to build my own library (to control my Display and Speakers) that's specifically useful for my projects.
I don't want any readymade libraries with different features, I just want direct control to every pixel of a computer (atleast my computer's display, I will think about cross platform later) and every vibration of my speaker(s).
How can I get this?
First Edit: After getting some informations in the comment-section/answers, I came to an understanding that in modern computers, direct access is not possible as every aspect regarding Display and speaker is controlled by the OS, and I can only request the OS to display a graphics in it's Window or play a sound by pre-encoding my sound in one of the supported audio formats (correct me if I'm wrong).
Now, let's change the scenario. I have my Display (with its driver hardware), my speaker (with its driver hardware), and a Micro-controller.
Now, by coding my own OS and booting it in my microcontroller, can I get direct control to every pixel of a computer and every vibration of my speaker(s).
...ANSWER
Answered 2022-Mar-25 at 16:17You can't. You have to get the OS to do it for you - in fact, that's the entire point of an OS. And that means either making system calls directly from assembly code (hard on Linux; practically impossible on Windows because they are undocumented) or using a library to tell the OS to do things.
You are probably interested in using a library that's as close to the OS as possible - "batteries not included" - so in Linux that would be something like ALSA (sound) and XCB (graphics) rather than something like Qt.
You can minimize your library usage - for example, if you make an array of pixels, and you only tell the OS "please create a window" and "please draw these pixels in my window" and "please play this sound data".
Of course it is also possible to tell it to make your program fullscreen so that the user can't see anything else. This is usually done by making a window and then making the window fullscreen. Linux does actually have ways to get more direct screen control - accessing the screen as a "framebuffer device" - but if you use this, you can't run any other graphics programs at the same time (not even the desktop). And you are still asking the operating system to put pixels on the screen - not talking to the hardware.
If you want to write a program that doesn't run with an OS, that's a completely different question (and still difficult).
QUESTION
I'm trying this package usb_serial to communicate with my hardware devices like Arduino, Esp8266, Esp32, FTDI board, etc.,
Right now I'm using a board with a CH340 chip in it. Device details are matching as mentioned in device_filter.xml
Am I missing somthing here, please help me if you know. Thank you
...ANSWER
Answered 2022-Mar-12 at 20:34I found the solution.
In the example code I commented subtitle: Text(device.manufacturerName!),
line.
The reason is I was using an unbranded CH340 chip, which did not have the manufacturer's name on it.
QUESTION
I saw that GCloud offers N2 instances with up to 128 vCPUs. I wonder what kind of hardware that is. Do they really put 128 cores into 1 chip? If so, Intel doesn't make them generally available for sale to the public, right? If they use several chips, how do they split the cores? Also, I assume that all cores are on the same node, do they place more than 2 CPU chips on that node or do they have chips with 56 cores (which also is a lot)?
Thanks!
...ANSWER
Answered 2022-Feb-26 at 06:29You can easily build or purchase a system with 128 vCPUs. Duplicating Google's custom hardware and firmware is another matter. 128 vCPUs is not large today.
Google Cloud publishes the processor families: CPU platforms
The Intel Ice Lake Xeon motherboards support multiple processor chips.
With a two-processor motherboard using the 40 core model (8380), 160 vCPUs are supported.
For your example, Google is using 32-core CPUs.
Note: one physical core is two vCPUs. link
I am not sure what Google is using for n2d-standard-224 which supports 224 vCPUs. That might be the Ice Lake 4 processor 28-core models.
GCloud N2 machines: 128 vCPUs in 1 chip?
Currently, the only processors that support 64 cores (128 vCPUs) that I am aware of are ARM processors from Ampere. That means Google is using one or more processor chips on a multi-cpu motherboard.
If so, Intel doesn't make them generally available for sale to the public, right?
You can buy just about any processor on Amazon, for example.
If they use several chips, how do they split the cores? Also, I assume that all cores are on the same node, do they place more than 2 CPU chips on that node or do they have chips with 56 cores (which also is a lot)?
You are thinking in terms of laptop and desktop technology. Enterprise rack mounted servers typically support two or more processor chips. This has been the norm for a long time (decades).
QUESTION
When I was implementing Not16
with Not
gates:
ANSWER
Answered 2021-Nov-20 at 14:19I believe you have typos in your Not components. The in should be in the form in=in[x], not in=[x] as you have it currently.
Conversely, your Nand components are properly formatted.
QUESTION
During the fetch stage of the fetch-execute cycle, why are the contents of the cell whose address is in the MA (memory address register) placed in MB (memory buffer) then copied to IR (instruction register), rather than placing the contents of address of MA directly in the IR?
...ANSWER
Answered 2022-Jan-23 at 19:20In theory it would be possible to send instruction fetch memory data directly to the IR (or to both the MB and the IR) — this would require extra hardware: wires and muxes.
You may notice that the architecture (depending on which one it is) makes use of few (one or two) busses, and this would effectively add another bus. So, I think that all we can say is that simplicity is the reason. Back in the day when processors were this simple, transistor counts were very limited for integrated circuits.
Going in the direction of making things more efficient, nowadays, even simple processors separate instruction (usually cache) memory from data (usually cache) memory. This independence accomplishes a number of improvements. MIPS, even the unpipelined single cycle processor, for example:
First, the PC (program counter) register replaces the MA for the instruction fetch side of things and the IR replaces the MB (as if loading directly into that register as you're suggesting), but let's also note that the IR can be reduced from being a true register to being wires whose output is stable for the cycle and thus can be worked on by a decode unit directly. (Stability is gained by not sharing the instruction memory hardware with the data memory hardware; whereas with only a single memory interface, data has to be copied around and stored somewhere so the interface can be shared for both code & data.)
That saves both the cycle you're referring to: to transfer data from MB to IR, but also the cycle before to capture the data in the MB register in the first place. (Generally speaking, enregistering some data requires a cycle, so if you can feed wires without enregistering, that's better, all other factors being the same.)
(Also depending on the architecture you're looking at, the PC on MIPS uses dedicated increment unit (adder) rather than attempting to share the main ALU and/or the busses for that increment — that could also save a cycle or two.)
Second, meanwhile the data memory can run concurrently with the instruction memory (a nice win) executing a data load from memory or store to memory in parallel with the fetch of the next instruction. The data side also forgoes the MB register as temporary parking place, and instead can load memory data directly into a processor register (the one specified by the load instruction).
Having two dedicated memories creates an independence that reduces the need for register capture while also allowing for parallelism, of course requiring more hardware for the design.
QUESTION
It’s quite easy to detect if Mac has an illuminated keyboard with ioreg
at the command line:
ANSWER
Answered 2021-Dec-15 at 14:22I figured out the following with some trial and error:
- Get the "IOResources" node from the IO registry.
- Get the "KeyboardBacklight" property from that node.
- (Conditionally) convert the property value to a boolean.
I have tested this on an MacBook Air (with keyboard backlight) and on an iMac (without keyboard backlight), and it produced the correct result in both cases.
QUESTION
I was interested in operating systems that used segmentation from 32 bit protected mode processors. When AMD added long mode, they didn't the segmentation hardware protection to it. Can any x86-64 processor in 32 bit protected mode use Physical Address extension so it can address more than 4 GB of memory?
...ANSWER
Answered 2021-Nov-27 at 02:05Can any x86-64 processor in 32 bit protected mode use Physical Address extension so it can address more than 4 GB of memory?
Yes.
Such an OS would be able to use more than the 64 GiB of memory (physical address space) that PAE was originally limited to; and could also still use segmentation and virtual8086 mode.
Unfortunately, 32-bit code can't use the extra registers that were added, which (depending on software) probably means up to 20% performance loss in most software (compared to 64-bit software on the same CPU).
QUESTION
Is there an API or a method for detecting which of the three main keyboard layouts – ANSI
, ISO
, or Japanese
– a Mac notebook uses?
After fairly extensive research, I could not find any information about this.
...ANSWER
Answered 2021-Nov-23 at 07:52After countless hours of searching and digging through dusty manuals, I finally found a way to determine physical keyboard layout types attached to the Mac.
By using ancient Carbon
APIs, you can call KBGetLayoutType
in combination with LMGetKbdType
to return the desired constants. This amazingly still works in macOS Monterey.
To anyone whose looking for a solution in the future, here it is using Swift 5.5:
QUESTION
Motive:
I am just learning the fundamentals of multithreading, not close to finishing them, but I'd like to ask a question this early in my learning journey to guide me toward the topics most relevant to my project I 'm working on.
Main:
a. If a process has two threads, one that edits a set of variables, the other only reads said variables and never edits their values; Then do we need any sort of synchronization for guaranteeing the validity of the read values by the reading thread?
b. Is it possible for the OS scheduling these two threads to cause the reading-thread to read a variable in a memory location in the exact same moment while the writing-thread is writing into the same memory location, or that's just a hardware/bus situation will never be allowed happen and a software designer should never care about that? What if the variable is a large struct instead of a little int or char?
...ANSWER
Answered 2021-Nov-20 at 19:50a. If a process has two threads, one that edits a set of variables, the other only reads said variables and never edits their values; Then do we need any sort of synchronization for guaranteeing the validity of the read values by the reading thread?
In general, yes. Otherwise, the thread editing the value could change the value only locally so that the other thread will never see the value change. This can happens because of compilers (that could use registers to read/store variables) but also because of the hardware (regarding the cache coherence mechanism used on the target platform). Generally, locks, atomic variables and memory barriers are used to perform such synchronizations.
b. Is it possible for the OS scheduling these two threads to cause the reading-thread to read a variable in a memory location in the exact same moment while the writing-thread is writing into the same memory location, or that's just a hardware/bus situation will never be allowed happen and a software designer should never care about that? What if the variable is a large struct instead of a little int or char?
In general, there is no guarantee that accesses are done atomically. Theoretically, two cores executing each one a thread can load/store the same variable at the same time (but often not in practice). It is very dependent of the target platform.
For processor having (coherent) caches (ie. all modern mainstream processors) cache lines (ie. chunks of typically 64 or 128 bytes) have a huge impact on the implicit synchronization between threads. This is a complex topic, but you can first read more about cache coherence in order to understand how the memory hierarchy works on modern platforms. The cache coherence protocol prevent two load/store being done exactly at the same time in the same cache line. If the variable cross multiple cache lines, then there is no protection.
On widespread x86/x86-64 platforms, variables having primitive types of <= 8 bytes can be modified atomically (because the bus support that as well as the DRAM and the cache) assuming the address is correctly aligned (it does not cross cache lines). However, this does not means all such accesses are atomic. You need to specify this to the compiler/interpreter/etc. so it produces/executes the correct instructions. Note that there is also an extension for 16-bytes atomics. There is also an instruction set extension for the support of transactional memory. For wider types (or possibly composite ones) you likely need a lock or an atomic state to control the atomicity of the access to the target variable.
QUESTION
I use a TPM 2.0 with verified and measured boot. Now I read about external TPM modules for mainboards, which do not have a TPM module yet. I am a bit confused on how secure this is. I think a attack vector could look like this:
- Put a man-in-the-middle device between mainboard and TPM which records every data sent
This way an attacker could exfiltrate e.g. windows bitlocker keys. Are there any methods to prevent such attacks? I am also interested about the security about TPM modules on motherboards, since there the same attack could be done. How is the firmware measured into the TPM? Does this rely on data from the TPM?
...ANSWER
Answered 2021-Nov-04 at 17:04Yes such man-in-the-middle attacks against the TPM are well-known; articles describing them seem to come out with regularity, almost on an annual basis (see here for the latest one).
The way to protect against them is session-based encryption. (see section 21 here)
To present the simplest use case, where the session is not an authorization session and is not bound to a TPM object: basically, you would start a salted session, which will ensure that only you and the TPM have access to the salt. Interception of the session start message would not help, as the salt is encrypted with a TPM key.
Then the session key is computed:
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install zasm
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page