Passing Arrays as Parameter in C

Short answer: you can’t but yes, you can!

This is an endlessly recurring question in many groups on the Internet. Today (2016/01/14) Google has 171 Million hits. This article answers the question and sheds some light on arrays in C. In the second part below I’ll discuss two-dimensional arrays as well.array_asm

IMO, arrays are the most misunderstood language construction of C, even more than pointers. Everybody knows that these mysterious pointers are somehow dangerous, thus people (beginners) tend to either avoid, or really try to understand them.

But arrays are something that every beginner quickly understands (in any language). But in C, arrays are actually hidden pointers which makes them even more dangerous than pointers.

Beginners may also read my articles about learning C part I, part II, and part III. Continue reading

Fractals And Intel x86_64 Assembler

fractasmSome time ago I wrote this article about using integer operations to calculate fractal images. Currently, I’m giving a course which prepares for malware analysis. Among other things we deal a lot with Intel assembler and how compilers create and optimize code.

The full code of everything discussed below (and also of the article referred to above) is found on Github at

One of the exercises was to write the integer version of the iteration function manually in assembler. Here is the original version in C: Continue reading

JPEG Support For Libcairo

cairo-bannerLibcairo supports several output file formats (PNG, PDF, SVG) and PNG as input format. But often it is necessary to read and write JPG files as well.

Libjpeg-turbo does all the JPEG stuff. All you have to do is to combine this with the Cairographics library. I implemented two functions in this small C source file. Most of the code is derived by the online code example of libjpeg and I modified it to fit into the Cairographics world.

Look at the comments in the source code for further information and have phun using it. Don’t hesitate to contact me!

-> Download source from Github <-

  • 2016/01/01: Code updated.
  • 2015/12/29: Code updated. On Hidden Service is now available on a Tor hidden service at http://7pd3i34noxnxolha.onion/.

Please be aware that this is experimental because it requires a lot of URL rewriting which is done by Apache’s mod_proxy, mod_proxy_http, and mod_proxy_html. I debugged it with Firebug and tried to fix all internal links. Please note that external links to other pages are not rewritten.

The main purpose is to be able to access completely surveillance-free (and for me to gain experience in proxying WordPress and mod_proxy_html ­čśë )

The Administrator’s TLS Certificate Hell

640_data-webNowadays, a responsible administrator should never run any service without TLS anymore. Unfortunately, this makes life even more difficult for several reasons. This article discusses some problems associated to certificates, specifically in respect to web applications which interactively connect to secondary services.

On one hand TLS configuration requires a lot of knowledge to create a secure configuration. Pages such as give a good support. Continue reading

Calculating Control Points For Bsplines

bspline_0This article explains how to calculate the control points for B-Splines. The basic idea is that we want to interpolate a smooth curve into a set of points. B-Splines are a sequence of Bezier curves which solve that problem. But each Bezier curve is defined by four points: the start and end point and two control points which define the final appearance of a curve segment.

I wrote a sample program which can be downloaded directly here. If you quickly want to use it, simply look at the code and its comments. If your are interested in the background go ahead and read this article ­čÖé Continue reading

HOWTO Render Charts With Smrender

franceThis article is a step-by-step guide to render your own sea charts. I assume that you have already installed it to your system. If not, download the latest version and run ./configure and make and make install as usual. Make sure that you have installed the packages libcairo2-dev, librsvg2-dev, and libfontconfig-dev.

You also may have a look at the detailed manual for more information. Continue reading