PSP Kick

All about the tech

Debugging Cygwin Programs

Has your organization ever wondered how to switch to a specific package on the Linux operating system? Well, at the moment there are several ways to choose it. In this blog post, we look forward to sharing them with you. These methods are not limited to firewall rules and can be broken down into six main categories:

  • iptables is a robust filter for filtering packets handled by the TCP/IP stack

  • ebtables – same fact as above, but focus on shell 2 (ISO/OSI comparison between models and/or TCP/IP models provided in our own blog post)

  • nftables – successor to iptables+ebtables

  • IP Rule is a tool for creating advanced routing policies

  • Lookup IP addresses – Forward packets according to the lookup table

  • BGP flow specification (how to set iptables rules with BGP protocol)
  • QOS – use the form of the tc filter command to filter QOS

  • eBPF with XDP

  • Filtering in OSI Protection 7 using a custom Ope applicationnArea

  • Which is the best way to debug Cygwin?

    1. Most importantly, the application crashed from source. To Computer Blog them, you need debug information, which, in turn, is usually removed from the executable files. You are probably configuring this option. 2. Create the known working cygwin-Debugging-Natural-World cygwin1.dll and gdb.exe.

    Before we start, a little reminder about packet flow in the Linux kernel:


    iptables is the most popular Linux package management method. Filtering rules can be divided into several types, which differ significantly: stateful and stateless. Using stateful filtering allows you to parse a particular packet based on how the session state context e.g. whether the connection is already established or not (the packet sounds like a new connection). However, simple state tracking comes at a cost: performance. This feature is significantly slower than the stateless solution, but allows you to do more. The rule in the following paragraphs is an example of minimizing packages based on their offer (here: new connection):

    By default, every packet in iptables is treated as stateful. To make an exception, you need to perform special actions in a special “raw table”:

    Almost certainly it’s good to always remember that the iptables method in general allows businesses to be classified at several levels of this OSI model, starting at level 2 (source and destination IP addresses) due to inference at level 7 (filters from the l7 project, which, to unfortunately, could no longer be developed individually).

    When dealing with stateful packages, it is also often important to remember that the Conntrack module makes the most efficient use of iptables with a 5-tuple consisting of:

  • Source and destination IP addresses
  • Source and destination ports (for TCP/UDP/SCTP and ICMP where different fields play roles in ports)
  • Log
  • This module does not see the I/O interface. So if another packet that was already invisible (in another VRF) hits that IP stack again, it doesn’t create an entirely new state. However, there is a workaround for this beautiful problem using the zones in the Conntrack module, which allows you to assign hulls with interface $X to zone $Y.

    Above: Paying an amount for multiple features is a slow iptables deposit method. It should be possible to speed it up, increase itAnd by disabling period state tracking, but the performance improvement (in terms of PPS) will be small. In terms of new connections/seconds, the gain will be greater. You can read more about this topic here.

    The long term plan is to port the iptables method to become BPF, which will give the biggest speed/performance gain.


    In the travel bag, we want to go beyond level 3, where we need to switch the tool to ebtables. ebtables allows us to work from layer 2 to movie 4. For example, if we want you to be able to drop packets where the MAC chat for IP is different from 00:11:22:33:44:55, we can use the below guide:

    It’s important to remember that packets passing through a Linux connection are parsed using FW rules. This is handled by the sysctl options to detach:

  • net.bridge.bridge-nf-call-arptables
  • net.bridge.bridge-nf-call-ip6tables
  • net.bridge.bridge-nf-call-iptables
  • How to debug using ” *.stackdump ” file?

    All the little tips are very realistic for me. Thanks for reading, it was bad English (English is not my first language). First, you need to use it to compile your program so that it can pass the -ggdb gcc flag, otherwise our own stack dump information is unnecessary. I also suggest passing the -O0 flag, which means that debugging with gdb will be easier as it probably won’t optimize the code.

    For more information, see this article. If we want to improve performance when needed, recoThey should be allowed to disable these calls.


    The scope of nftables (introduced in the 3.13 kernel) is to replace some network filter tails (ip(6)tables/arptables/ebtables) while reusing most of them. Expected advantages and disadvantages of nftables:

  • less double laws
  • higher performance
  • a tool for working at all levels
  • The guys from RedHat have abandoned the performance improvement test. The following graphs show the correlation between performance degradation and the number of IPs blocked:

    nftables are configured through our own nft utility located in user properties. To drop a TCP packet, the implementation commands must be run against each other (the first two are required, nftables are not packed with standard tables/strings):

    Note. Whenever nftables and iptables are used on this particular system, the following principles apply:

    nft Empty Accept Accept Zablocheat Empty
    iptables Empty Empty Block Accept Accept
    Results Go Go Unavailable Unavailable Go

    IP Rule

    How to instruct Cygwin to start GDB?

    The Internet Protocol Rules Tool is a lesser known method for creating high-level routing policies. After traversing the firewall policies, the browsing logic decides if (and where) the packet should be forwarded frequently, dropped it, or do something else entirely. There are several actions, possible stateless NAT is one of them (little known fact), but “black hole” is one of them:


    ip rule is considered a fast, stateless filter that is constantly used to reject DDOS traffic. Unfortunately, this has a downside: it allows you and me to work with ingress interfaces based only on ports IP SRC/DST (Layer 3), TCP/UDP (Layer 4).

    How to write a stack trace in Cygwin?

    via cygwin_stackdump (): cygwin_stackdump () creates a file that is recognized as executable with a .stackdump suffix. cygwin_stackdump () writes undemanding stack traces that consist of a frame, function, and arguments in hex only.

    Note that the interface loop (lo) will play an important role in the global sets Max IP rules. Whenever it was previously used as an inbound interface parameter (iif lo), it decides whether the trade right applies to blog transit traffic or outbound traffic from the host where this rule is configured. For example, if we want to remove travel packages destined for, we can use the following rule: