Just finished learning x86 assembly language. What can I do with it? [closed]

One of my favorite hobbies is Reverse Engineering. It requires a solid knowledge of assembly and the use of disassemblers/debuggers to walk through compiled code. This allows you to alter, understand and reverse compiled programs. Each new program is like a puzzle waiting to be solved! For example, a lot of people reverse games like … Read more

Any tool/software in windows for viewing ELF file format? [closed]

readelf and objdump are both excellent utilities if you are on a Unix box. Both are provided by Cygwin. readelf will give you a good overview of the ELF header information, section headers. You can also use it to get relocation and symbol information. Overall, readelf can give greater detail on the contents of an … Read more

x86, difference between BYTE and BYTE PTR

Summary: NASM/YASM requires word [ecx] when the operand-size isn’t implied by the other operand. (Otherwise [ecx] is ok). MASM/TASM requires word ptr [ecx] when the operand-size isn’t implied by the other operand. (Otherwise [ecx] is ok). They each choke on the other’s syntax. WARNING: This is very strange area without any ISO standards or easy-to-find … Read more

Using SSE instructions

SSE instructions are processor specific. You can look up which processor supports which SSE version on wikipedia. If SSE code will be faster or not depends on many factors: The first is of course whether the problem is memory-bound or CPU-bound. If the memory bus is the bottleneck SSE will not help much. Try simplifying … Read more

Why would introducing useless MOV store instructions speed up a tight loop in x86_64 assembly?

The most likely cause of the speed improvement is that: inserting a MOV shifts the subsequent instructions to different memory addresses one of those moved instructions was an important conditional branch that branch was being incorrectly predicted due to aliasing in the branch prediction table moving the branch eliminated the alias and allowed the branch … Read more

What exactly is the base pointer and stack pointer? To what do they point?

esp is as you say it is, the top of the stack. ebp is usually set to esp at the start of the function. Function parameters and local variables are accessed by adding and subtracting, respectively, a constant offset from ebp. All x86 calling conventions define ebp as being preserved across function calls. ebp itself … Read more