Như chúng ta có thể thấy điều này không phải là một quá trình hiệu quả. Cố gắng để đoán bù đắp ngay cả khi biết nơi cáckhởi đầu của cuộc sống ngăn xếp là gần như không thể. Chúng tôi sẽ cần lúc tốt nhất một trăm cố gắng, và lúc tồi tệ nhất một vàinghìn. Vấn đề là chúng ta cần phải đoán * chính xác * nơi địa chỉ của mã của chúng tôi sẽ bắt đầu. Nếu chúng tabởi một byte hơn chúng tôi sẽ chỉ nhận được một sự vi phạm phân khúc hoặc một chỉ dẫn không hợp lệ. Một cách để tăngchúng tôi rất có thể là để pad phía trước của chúng tôi bộ đệm tràn với NOP hướng dẫn. Hầu hết các bộ vi xử lý có một NOPhướng dẫn thực hiện một hoạt động không. Nó thường được sử dụng để trì hoãn thực hiện cho các mục đích của thời gian. Chúng tôi sẽtận dụng lợi thế của nó và điền vào một nửa của bộ đệm tràn của chúng tôi với họ. Chúng tôi sẽ đặt shellcode của chúng tôi tại Trung tâm,và sau đó làm theo nó với địa chỉ trở lại. Nếu chúng tôi may mắn và địa chỉ trả lại chỉ bất cứ nơi nào trong chuỗicủa NOPs, họ sẽ chỉ được thực hiện cho đến khi chúng đạt đến mã của chúng tôi. Kiến trúc Intel NOP hướng dẫn làmột byte dài và nó dịch cho 0x90 trong mã máy. Giả sử các ngăn xếp bắt đầu tại địa chỉ 0xFF, đó là viết tắt của Scho vỏ mã, và N là viết tắt cho một chỉ dẫn NOP ngăn xếp mới sẽ trông như thế này:
đang được dịch, vui lòng đợi..