The best Romance of the Three Kingdoms adaptation of all time? Mind blowing.
www.youtube.com/watch?v=e8VWVvHjskM&list=PLIj4BzSwQ-_ueXTO7EBmShk1b3lEqc5b_ official CCTV电视剧 (CCTV TV Series Channel) upload without Chinese + English subtitles.
Video 1.
Title sequence of the Romance of the Three Kingdoms (1994 TV series)
Source. From this you can understand that the number os extras is off the charts!
Water Margin by Ciro Santilli 37 Updated 2025-07-16
Talks about rebellion of the oppressed (and bandits), and therefore has been controversial throughout the many Chinese dictatorships.
The book is based on real events surrounding 12th century rebel leader Song Jiang during the Song dynasty.
It is also interesting that Mao Zedong was apparently a fan of the novel, although he had to hide that to some extent due to the controversial nature of the material, which could be said to instigate rebellion.
The incredible popularity of the novel can also be seen by the large number of paintings of it found in the Summer Palace.
This is a good novel. It appeals to Ciro Santilli's sensibilities of rebelling against unfairness, and in particular about people who are at the margin of society (at the river margin) doing so. Tax the rich BTW.
It also has always made Ciro quite curious how such novels are not used as a way to inspire people to rebel against the Chinese Communist Party.
Full text uploads of Chinese versions:
Only appears in the executable.
Contains information of how the executable should be put into the process virtual memory.
The executable is generated from object files by the linker. The main jobs that the linker does are:
  • determine which sections of the object files will go into which segments of the executable.
    In Binutils, this comes down to parsing a linker script, and dealing with a bunch of defaults.
    You can get the linker script used with ld --verbose, and set a custom one with ld -T.
  • do relocation according to the .rela.text section. This depends on how the multiple sections are put into memory.
readelf -l hello_world.out gives:
Elf file type is EXEC (Executable file)
Entry point 0x4000b0
There are 2 program headers, starting at offset 64

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x00000000000000d7 0x00000000000000d7  R E    200000
  LOAD           0x00000000000000d8 0x00000000006000d8 0x00000000006000d8
                 0x000000000000000d 0x000000000000000d  RW     200000

 Section to Segment mapping:
  Segment Sections...
   00     .text
   01     .data
On the ELF header, e_phoff, e_phnum and e_phentsize told us that there are 2 program headers, which start at 0x40 and are 0x38 bytes long each, so they are:
00000040  01 00 00 00 05 00 00 00  00 00 00 00 00 00 00 00  |................|
00000050  00 00 40 00 00 00 00 00  00 00 40 00 00 00 00 00  |..@.......@.....|
00000060  d7 00 00 00 00 00 00 00  d7 00 00 00 00 00 00 00  |................|
00000070  00 00 20 00 00 00 00 00                           |.. .....        |
and:
00000070                           01 00 00 00 06 00 00 00  |        ........|
00000080  d8 00 00 00 00 00 00 00  d8 00 60 00 00 00 00 00  |..........`.....|
00000090  d8 00 60 00 00 00 00 00  0d 00 00 00 00 00 00 00  |..`.............|
000000a0  0d 00 00 00 00 00 00 00  00 00 20 00 00 00 00 00  |.......... .....|
Structure represented www.sco.com/developers/gabi/2003-12-17/ch5.pheader.html:
typedef struct {
    Elf64_Word  p_type;
    Elf64_Word  p_flags;
    Elf64_Off   p_offset;
    Elf64_Addr  p_vaddr;
    Elf64_Addr  p_paddr;
    Elf64_Xword p_filesz;
    Elf64_Xword p_memsz;
    Elf64_Xword p_align;
} Elf64_Phdr;
Breakdown of the first one:
  • 40 0: p_type = 01 00 00 00 = PT_LOAD: this is a regular segment that will get loaded in memory.
  • 40 4: p_flags = 05 00 00 00 = execute and read permissions. No write: we cannot modify the text segment. A classic way to do this in C is with string literals: stackoverflow.com/a/30662565/895245 This allows kernels to do certain optimizations, like sharing the segment amongst processes.
  • 40 8: p_offset = 8x 00 TODO: what is this? Standard says:
    This member gives the offset from the beginning of the file at which the first byte of the segment resides.
    But it looks like offsets from the beginning of segments, not file?
  • 50 0: p_vaddr = 00 00 40 00 00 00 00 00: initial virtual memory address to load this segment to
  • 50 8: p_paddr = 00 00 40 00 00 00 00 00: unspecified effect. Intended for systems in which physical addressing matters. TODO example?
  • 60 0: p_filesz = d7 00 00 00 00 00 00 00: size that the segment occupies in memory. If smaller than p_memsz, the OS fills it with zeroes to fit when loading the program. This is how BSS data is implemented to save space on executable files. i368 ABI says on PT_LOAD:
    The bytes from the file are mapped to the beginning of the memory segment. If the segment’s memory size (p_memsz) is larger than the file size (p_filesz), the ‘‘extra’’ bytes are defined to hold the value 0 and to follow the segment’s initialized area. The file size may not be larger than the memory size.
  • 60 8: p_memsz = d7 00 00 00 00 00 00 00: size that the segment occupies in memory
  • 70 0: p_align = 00 00 20 00 00 00 00 00: 0 or 1 mean no alignment required. TODO why is this required? Why not just use p_addr directly, and get that right? Docs also say:
    p_vaddr should equal p_offset, modulo p_align
The second segment (.data) is analogous. TODO: why use offset 0x0000d8 and address 0x00000000006000d8? Why not just use 0 and 0x00000000006000d8?
Then the:
 Section to Segment mapping:
section of the readelf tells us that:
  • 0 is the .text segment. Aha, so this is why it is executable, and not writable
  • 1 is the .data segment.
Water Margin quote by Ciro Santilli 37 Updated 2025-07-16
Something along:
If two men are destined to meet, they will come together from thousands of miles apart. If they aren't, they will pass by in front of one another and never know about one another's existence.
TODO find Chinese.
Gao Qiu by Ciro Santilli 37 Updated 2025-07-16
The ball game is named cuju.
He is extremely despicable and petty, enjoys only useless things, and is vengeful and disloyal. Rooting for sport teams is stupid.
Surely his family name 俅 is a pun on the same sounding character 求 for ball.
Lin Chong scene by Ciro Santilli 37 Updated 2025-07-16
Lance instructor of the 800,000 Imperial Guards (八十万禁军枪棒教头). TODO understand the "枪棒" part: zhidao.baidu.com/question/206659649.html.
The adopted son of Gao Qiu wanted to fuck his wife, and because of this they frame him of planning to take revenge by killing Go Qiu, even though Lin Chong had decided not to take revenge to avoid harming his wife further.
They just keep trying to kill him, until at one point he just gives up and becomes a fugitive.
His story is well told in The Water Margin.
Usually called by others as 林教头 (lin jiaotou, literally Head Instructor Lin, but usually translated as just Instructor Lin).
Lu Zhishen by Ciro Santilli 37 Updated 2025-07-16
Early on, he's usually called by others as Major Lu (魯提轄).
His original name is Lu Da 魯達
He then receives the Buddhist name Zhishen (智深, profound wisdom) during conversion.
Sun Erniang by Ciro Santilli 37 Updated 2025-07-16
Erniang is way more popular than her ranking in the 108 Stars of Destiny.
This is of course in part because she is one of the only 3 108 Stars of Destiny women. But her story about making human mantou is particularly fun!
She's also quite seductive, which gives directors a good opportunity for a bit of fan service. See e.g. kknews.cc/history/6epp2pp.html for a still from The Water Margin showing some good cleavage for example.
He used to train the 800,000 imperial guard troops at the Capital, much like Lin Chong. He's not one of the 108 Stars of Destiny.

Pinned article: Introduction to the OurBigBook Project

Welcome to the OurBigBook Project! Our goal is to create the perfect publishing platform for STEM subjects, and get university-level students to write the best free STEM tutorials ever.
Everyone is welcome to create an account and play with the site: ourbigbook.com/go/register. We belive that students themselves can write amazing tutorials, but teachers are welcome too. You can write about anything you want, it doesn't have to be STEM or even educational. Silly test content is very welcome and you won't be penalized in any way. Just keep it legal!
We have two killer features:
  1. topics: topics group articles by different users with the same title, e.g. here is the topic for the "Fundamental Theorem of Calculus" ourbigbook.com/go/topic/fundamental-theorem-of-calculus
    Articles of different users are sorted by upvote within each article page. This feature is a bit like:
    • a Wikipedia where each user can have their own version of each article
    • a Q&A website like Stack Overflow, where multiple people can give their views on a given topic, and the best ones are sorted by upvote. Except you don't need to wait for someone to ask first, and any topic goes, no matter how narrow or broad
    This feature makes it possible for readers to find better explanations of any topic created by other writers. And it allows writers to create an explanation in a place that readers might actually find it.
    Figure 1.
    Screenshot of the "Derivative" topic page
    . View it live at: ourbigbook.com/go/topic/derivative
  2. local editing: you can store all your personal knowledge base content locally in a plaintext markup format that can be edited locally and published either:
    This way you can be sure that even if OurBigBook.com were to go down one day (which we have no plans to do as it is quite cheap to host!), your content will still be perfectly readable as a static site.
    Figure 2.
    You can publish local OurBigBook lightweight markup files to either https://OurBigBook.com or as a static website
    .
    Figure 3.
    Visual Studio Code extension installation
    .
    Figure 4.
    Visual Studio Code extension tree navigation
    .
    Figure 5.
    Web editor
    . You can also edit articles on the Web editor without installing anything locally.
    Video 3.
    Edit locally and publish demo
    . Source. This shows editing OurBigBook Markup and publishing it using the Visual Studio Code extension.
    Video 4.
    OurBigBook Visual Studio Code extension editing and navigation demo
    . Source.
  3. https://raw.githubusercontent.com/ourbigbook/ourbigbook-media/master/feature/x/hilbert-space-arrow.png
  4. Infinitely deep tables of contents:
    Figure 6.
    Dynamic article tree with infinitely deep table of contents
    .
    Descendant pages can also show up as toplevel e.g.: ourbigbook.com/cirosantilli/chordate-subclade
All our software is open source and hosted at: github.com/ourbigbook/ourbigbook
Further documentation can be found at: docs.ourbigbook.com
Feel free to reach our to us for any help or suggestions: docs.ourbigbook.com/#contact