By using this site, you agree to the Privacy Policy and Terms of Use.
Accept
Security Parrot - Cyber Security News, Insights and ReviewsSecurity Parrot - Cyber Security News, Insights and Reviews
Notification
Latest News
OpenAI may use Associated Press archive for AI training
July 14, 2023
EU users can hold conversations with Google Bard from training set
July 14, 2023
Aptos, the new default font for Microsoft Office
July 14, 2023
BlackLotus UEFI bootkit sources published on GitHub
July 14, 2023
Hackers from the XDSpy cyber-espionage group attacked Russian organizations on behalf of the Ministry of Emergency Situations
July 14, 2023
Aa
  • News
  • Tutorials
  • Security InsiderComing Soon
  • Expert InsightComing Soon
Reading: Fundamentals of hacking. Looking for high-level language structures in x86-64 programs
Share
Security Parrot - Cyber Security News, Insights and ReviewsSecurity Parrot - Cyber Security News, Insights and Reviews
Aa
Search
  • News
  • Tutorials
  • Security InsiderComing Soon
  • Expert InsightComing Soon
Follow US
Security Parrot - Cyber Security News, Insights and Reviews > News > Fundamentals of hacking. Looking for high-level language structures in x86-64 programs
News

Fundamentals of hacking. Looking for high-level language structures in x86-64 programs

Last updated: 2023/07/09 at 4:34 AM
Security Parrot Editorial Team Published July 9, 2023
Share
SHARE

Understanding Functions in High-Level Languages

Modern disassemblers are quite intelligent and take on the lion’s share of recognition of key structures. In particular, IDA Pro successfully copes with the identification of standard library functions, local variables addressed through the RSP register, case branches, and more. However, sometimes IDA is mistaken, misleading the researcher, besides, the high cost of IDA Pro does not always justify its use. For example, students of assembly language (and the best way to learn assembly language is to disassemble other people’s programs), Ida can hardly afford.
Of course, the world did not converge on IDA, there are other disassemblers – for example, the same DUMPBIN, which is included in the standard delivery of the SDK. Why not take advantage of it? Of course, if there is nothing better at hand, DUMPBIN will do, but in this case you will have to forget about the intelligence of the disassembler and use only your head.

Getting Started with Non-Optimizing Compilers

First of all, we will get acquainted with the results of the work of non-optimizing compilers – the analysis of their code is relatively simple and quite understandable even for beginners in programming. Then, having mastered the disassembler, we move on to more complex things – optimizing compilers that generate very tricky, confusing and ornate code.

Identifying Functions

Function identification is the first step in the study of programs written in high-level languages. A function (also called a procedure or subroutine) is the basic building block of procedural and object-oriented languages, so code disassembly usually begins with identifying functions and identifying fictitious arguments passed to them. Strictly speaking, the term “function” is not present in all languages, but even where it is present, its definition varies from language to language.
Without going into details, we will understand a function as a separate sequence of commands called from various parts of the program. A function may take one or more arguments, or it may take none; may return the result of its work, or may not return. The key property of a function is the return of control to the place of its call, and its characteristic feature is the multiple call from different parts of the program (although some functions are called from only one place).
How does the function know where to return control? Obviously, the calling code must first store the return address and, along with other arguments, pass it to the called function. There are many ways to solve this problem: you can, for example, put an unconditional jump to the return address at the end of the function before calling it, you can save the return address in a special variable and, after the function ends, perform an indirect jump using this variable as the operand.

Weekly Updates For Our Loyal Readers!

Security Parrot Editorial Team July 9, 2023
Share this Article
Facebook Twitter Email Copy Link Print

Archives

  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • February 2023
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020

You Might Also Like

News

OpenAI may use Associated Press archive for AI training

July 14, 2023
News

EU users can hold conversations with Google Bard from training set

July 14, 2023
News

Aptos, the new default font for Microsoft Office

July 14, 2023
News

BlackLotus UEFI bootkit sources published on GitHub

July 14, 2023

© 2022 Parrot Media Network. All Rights Reserved.

  • Home
  • Parrot Media Group
  • Privacy Policy
  • Terms and Conditions
Join Us!

Subscribe to our newsletter and never miss our latest news, podcasts etc..

Zero spam, Unsubscribe at any time.

Removed from reading list

Undo
Go to mobile version
Welcome Back!

Sign in to your account

Lost your password?